You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

添加login_required装饰器后Flask /dashboard路由返回HTTP 302状态码

问题分析与解决方案

核心问题1:装饰器存在未定义变量错误

你的login_required装饰器里,调用原函数时传入了user参数,但这个变量完全没定义。就算用户已登录(session里存在logged_in),执行到这一步也会触发NameError,这是必须先修复的bug。

核心问题2:Session未设置登录标记

HTTP 302是重定向状态码,说明装饰器触发了else分支——也就是'logged_in'不在session中。你需要在用户登录成功的逻辑里,给session添加登录标记,比如在user/routes.py的登录视图中加入:

session['logged_in'] = True

登出时记得移除这个标记:

session.pop('logged_in', None)

修复后的装饰器代码

因为你的dashboard函数不需要接收user参数,直接去掉错误的参数传递:

def login_required(f):
    @wraps(f)
    def wrap(*args, **kwargs):
        if 'logged_in' in session:
            return f(*args, **kwargs)
        else:
            return redirect('/')
    return wrap

额外检查项

  • 必须给app.secret_key设置有效随机值,空字符串会导致session无法正常工作:
    app.secret_key = 'your_random_secure_secret_key'  # 替换成随机生成的密钥
    
  • 检查user/routes.py中的登录逻辑,确认用户验证通过后确实设置了session['logged_in']。

内容的提问来源于stack exchange,提问作者chiefqueef

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 14:12:18