烧瓶登录在身份验证后随机使会话无效



我正在使用烧瓶登录 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'

最新更新