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

Python3+Flask授权门户:如何重定向至用户授权前请求的页面

Flask授权后重定向至原请求页面的实现方案

1. 拦截未授权请求时保存原页面URL

在用户未登录/未授权时,把他原本要访问的页面URL存储到session中,后续授权完成后读取这个值进行重定向。可以通过自定义装饰器或者before_request钩子实现:

方式一:自定义登录验证装饰器

from functools import wraps
from flask import session, redirect, url_for, request

def login_required(f):
    @wraps(f)
    def decorated_function(*args, **kwargs):
        if 'user_id' not in session:  # 替换为你的授权判断逻辑
            # 排除登录/授权自身路由,仅保存GET请求的完整URL
            if request.endpoint != 'auth.login' and request.method == 'GET':
                session['next_url'] = request.full_path
            return redirect(url_for('auth.login'))
        return f(*args, **kwargs)
    return decorated_function

给需要授权的路由添加该装饰器:

@app.route('/dashboard')
@login_required
def dashboard():
    return '用户仪表盘页面'

方式二:全局拦截钩子(before_request)

如果需要全局拦截未授权请求,可使用before_request:

@app.before_request
def check_auth():
    # 排除无需授权的路由(登录、静态文件等)
    exempt_routes = ['auth.login', 'static']
    if request.endpoint not in exempt_routes and 'user_id' not in session:
        if request.method == 'GET':
            session['next_url'] = request.full_path
        return redirect(url_for('auth.login'))

2. 授权完成后重定向至原页面

在登录/授权成功的视图函数中,读取session里保存的next_url,优先跳转至该地址,无值时使用默认页面:

@app.route('/login', methods=['GET', 'POST'])
def login():
    if request.method == 'POST':
        # 执行授权验证逻辑(示例:验证用户名密码)
        username = request.form['username']
        password = request.form['password']
        if validate_user(username, password):  # 自定义验证函数
            session['user_id'] = username  # 保存用户标识到session
            # 取出原URL,默认重定向首页
            next_url = session.pop('next_url', '/')
            return redirect(next_url)
        else:
            return '用户名或密码错误'
    return '登录页面'

3. 关键注意事项

  • 必须配置Flask的SECRET_KEY,否则session无法正常工作:
    app.config['SECRET_KEY'] = 'your-secure-secret-key-here'
    
  • 仅处理GET请求的跳转:POST请求的参数难以直接保存重定向,一般场景下只需处理GET请求;若需支持POST,需额外用临时存储(如数据库、缓存)保存请求数据,授权后重新提交,实现复杂度较高。
  • 避免循环重定向:务必排除登录/授权相关路由,防止未授权时反复跳转至登录页又被拦截。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 22:08:24