flask_openid多节点下登录问题

在使用Flask-OpenID进行web开发时,单机部署没有问题,但在多节点服务器上,由于assoc信息存储在本地文件,导致登录验证可能失败。通过深入分析Flask-OpenID和python-openid源码,可以使用`store.sqlstore.MySQLStore`将assoc信息存储在MySQL数据库中,实现多节点间的同步,从而解决登录问题。
摘要由CSDN通过智能技术生成

应用场景

在web开发中,不可避免使用openid来进行登录。当使用flask框架开发时,flask_openid则是在openid的基础上进行封装,使其更适用于flask框架。flask_openid的官方文档demo是使用fs_store_path来存储临时文件,例如assoc的各个信息,详情可以看openid的登录流程。
demo的代码如下

from flask.ext.openid import OpenID
oid = OpenID(app, '/path/to/store', safe_roots=[])

在单机开发下,按着官方文档进行发开是没有啥问题的。但是当代码部署到多节点的服务器上时,则会遇到多节点问题。

问题描述

多节点下登录的流程如下:
1 A节点发起openid请求,获得assoc信息,并保存在本节点的保存文件中。
2 A节点发起跳转,跳转到openid的验证页面,用户进行验证操作。
3 验证成功后,跳转到发情openid验证请求的网站,但由于此时服务器是多节点,所有不能保证验证成功的响应能跳转到A节点。假如跳转到了B节点,则验证失败。

通过上述的分析发现在多节点服务器中,不能用本地化文件的方式来保存获得的assoc信息,必须要使用其他方式。

问题解决方法

仔细查看flask_openid的官方文档,其中

oid = OpenID()

def create_app():
    app = Flask(__name__)
    oid.init_app(app)
    return
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值