我正在使用烧瓶登录 https://flask-login.readthedocs.io/en/latest 进行会话管理。用户首先登录(login.html)应用程序并转到主页.html。但是,在用户进行身份验证并单击不同的链接后,它将踢出会话并返回登录页面。这是非常随机发生的,我不确定出了什么问题?它正在使用阿帕奇。本地主机似乎没问题,但在 apache 中遇到了这个问题。是否有特定的 apache 配置需要注意?
请告知如何解决此问题?非常感谢!!
class User(UserMixin):
pass
@login_manager.user_loader
def load_user(user_id):
print "load_user...." + user_id
user = User()
user.id = user_id
return user
@app.route("/login", methods=['POST'])
def login():
#login procedure
curr_user = User()
curr_user.id = LOGIN_USERNAME
login_user(curr_user)
return redirect(url_for('home'))
@app.route("/")
@app.route("/home")
@login_required
def home():
return render_template('home.html')
这是一个旧帖子,但我找到了这个答案,它似乎已经为我解决了它:https://stackoverflow.com/a/57162593/5424359基本上,您需要确保将app.secret_key设置为某个密钥。获取密钥的简单方法如下。
>>>import os
>>>os.urandom(24)
取该号码并设置app.secret_key。确保应用不会每次都生成密钥。
路由/
函数不验证用户的会话,只返回登录模板。
修改loading()
函数
from flask import url_for
@app.route("/")
def loading():
return redirect(url_for('.home'))
或者验证用户是否已登录
from flask_login import current_user
@app.route("/")
def loading():
if current_user.is_authenticated:
return render_template('home.html')
else:
return render_template('login.html')
或
移除loading()
功能并将/
路由添加到home()
@app.route("/")
@app.route("/home")
@login_required
def home():
return render_template('home.html')
这样,每当请求路由/
或/home
时,flask 都会验证登录(因为存在@login_required
装饰器)。如果未登录,则将呈现为 LoginManager
定义的login_view
。
lm = LoginManager()
lm.init_app(flask_app)
lm.login_view = '/login'