我正在撰写一个Flask
的网站。我使用Flask-Secuirty
进行身份验证。我使用nginx + gunicorn
来部署它。
nginx的配置如下:
server{
listen 80;
server_name project.example.com;
location / {
proxy_pass http://127.0.0.1:5000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forward-For $proxy_add_x_forwarded_for;
}
}
我使用gunicorn -w worker_number -k gevent run:app -p app.pid -b 127.0.0.1:5000
启动gunicorn
。
如果worker_number
为1
,一切正常。
如果worker_number
大于1
,如3
,则无法使用Flask-Security
登录。
服务器的输出表示登录后的请求是200.但是服务器再次将我重定向到登录页面。
经过一番搜索,我找不到直接原因。我想这可能是由于Flask的SERVER_NAME
配置或Flask-SQLAlchemy
的误用造成的。
以前是否有人遇到过这种情况?请给我一些建议。
答案 0 :(得分:1)
我遇到了与flask_login类似的问题,当worker_number大于1时,我无法登录。
我的app.secret_key设置为os.urandom(24),因此每个工作人员都会有另一个密钥。
将app.secret_key设置为字符串解决了我的问题。
答案 1 :(得分:0)
使用Flask-Session之类的内容,并使用Redis作为会话存储。我不确定Flask-Security的工作原理,但我认为它依赖于Flask会话,在这种情况下,它可以解决用户会话在应用服务器之间切换的问题。
答案 2 :(得分:0)
只需使用固定的密钥。
使用以下命令生成。
$ openssl rand -base64 <desired_length>
如果您不希望出于安全目的而在源代码中对密钥进行硬编码。
设置并获取环境变量。
import os
# -- snip --
app.config["SECRET_KEY"] = os.environ.get("FLASK_APP_SECRET_KEY")