应用场景
在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