我遇到了 Flask-Login 的问题,由于某种原因,它似乎清除了我的会话中的数据。当我在Docker容器中的 AWS 上运行我的应用程序时,这个问题似乎只发生在我身上。在Docker容器中本地运行时,似乎没有任何问题。容器启动使用 supervisord 启动应用程序以启动 nginx 和 gunicorn 服务器。
我使用Flask-Login和SQLAlchemy来处理我的用户登录。我在我的用户模型中使用get_auth_token()
方法创建自定义令牌,该方法将令牌与一些会话数据存储在我的数据库中。我使用token_loader
和user_loader
回调来从数据库中检索我的用户数据,该工作正常。
但是,如果我没有主动使用我的应用程序几分钟,当我更改为需要登录的页面时,会话数据似乎消失了。我的会话Cookie保持不变,似乎永远不会调用token_loader
或user_loader
回调。为了解决会话可能发生的事情,我附加了一个@app.before_request
处理程序来打印会话内容:
[2015-09-29 14:47:21,348] DEBUG in __init__: <SecureCookieSession {u'csrf_token': '51b5b253c55ac954c1bc61dd2dca513e18c4d790', u'_fresh': True, u'user_id': 3, u'_id': 'd3adbd2ed3905986d515aeb04cd1ff7d'}>
[2015-09-29 14:47:21,382] DEBUG in __init__: <SecureCookieSession {u'_flashes': [('message', u'Please log in to access this page.')]}>
似乎所有的用户信息都是为了让我能够加载我的用户,但它已经保释并重新定向到登录页面,并显示Flask-Login flash错误。在它甚至触及我的回调以从数据库加载用户之前,它会重新定向。
这可能只是我的服务器配置设置问题导致域名出现问题吗?我不确定我需要查看什么,并尝试进一步调试。
答案 0 :(得分:1)
这是Flask-Login中的已知错误,已在0.2.10版本(由我发布)修复。该漏洞再次出现在Flask-Login的0.3.0版本中,截至今天是最新版本。我提交了一个新的修复程序,加上一个单元测试,以防止再次发生这种情况。该修复程序几天前已合并,但尚未发布0.3.1版本。
错误报告:https://github.com/maxcountryman/flask-login/issues/231