Flask中如何将@login_required装饰器重定向至指定路由?
自定义
@login_required装饰器的登录重定向路由方法 开发小型Web应用过程中,使用Flask-Login提供的@login_required装饰器时,装饰器会默认把未登录用户重定向到不存在的/login路由,需要手动配置符合自身项目结构的重定向地址。
你当前的相关代码:
@auth.route('/logout', methods=['POST']) @login_required def logout(): session.pop("user", None) return redirect(url_for('index'))
全局统一配置(推荐方案)
所有带@login_required装饰器的路由,会统一使用配置的登录跳转地址,无需逐个路由单独设置:
- 找到项目中初始化
LoginManager插件实例的代码段 - 给实例的
login_view属性赋值为你的登录视图对应的端点(即url_for中使用的视图函数标识,不要直接填路由路径)
示例配置代码:
from flask_login import LoginManager # 初始化插件实例 login_manager = LoginManager() # 绑定当前Flask应用实例 login_manager.init_app(app) # 配置自定义登录路由端点,根据项目实际的视图函数名修改 login_manager.login_view = 'auth.login' # 可选配置:自定义未登录时的提示文案 login_manager.login_message = "请先完成登录后再访问该页面"
配置完成后,所有触发登录校验的路由,都会自动重定向到指定的登录地址,不再跳转到默认不存在的/login路径。
自定义未授权跳转逻辑
如果需要在跳转过程中携带参数(比如记录用户原访问地址,方便登录成功后自动回跳),可以通过注册全局未授权回调的方式完全覆盖默认跳转行为:
from flask import request, redirect, url_for @login_manager.unauthorized_handler def handle_unauthorized(): # 自行实现跳转逻辑,将当前访问路径作为参数传给登录页 return redirect(url_for('auth.login', next_path=request.path))
注意:
login_view填写的是视图端点字符串,不是直接的URL路径,否则会在url_for解析时抛出构建URL错误。
内容的提问来源于stack exchange,提问作者DRE
相关产品推荐
相关产品推荐

