添加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
相关产品推荐
相关产品推荐

