You need to enable JavaScript to run this app. Flask中如何将@login_required装饰器重定向至指定路由?
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.24 06:15:02