Python中Flask重定向到第三方授权登录后,如何跳转到指定接口?

现在的项目上,重定向到第三方授权登陆页面,输入完账号密码之后,页面跳转到了一个接口上去。但是我完全没有找到什么地方有设置了这个。有没有人能解答一下。
Python中Flask重定向到第三方授权登录后,如何跳转到指定接口?

4 回复

Oauth 了解一下……


在Flask里做第三方登录重定向后跳转到指定接口,核心就两步:设置好回调URL和用session或state参数保持状态。

这是典型的OAuth流程,以GitHub登录为例:

from flask import Flask, redirect, request, session, url_for
from authlib.integrations.flask_client import OAuth
import secrets

app = Flask(__name__)
app.secret_key = secrets.token_hex(16)  # 生产环境用固定密钥

oauth = OAuth(app)
github = oauth.register(
    name='github',
    client_id='YOUR_CLIENT_ID',
    client_secret='YOUR_CLIENT_SECRET',
    access_token_url='https://github.com/login/oauth/access_token',
    authorize_url='https://github.com/login/oauth/authorize',
    api_base_url='https://api.github.com/',
    client_kwargs={'scope': 'user:email'}
)

@app.route('/login')
def login():
    # 生成随机state防止CSRF攻击
    session['state'] = secrets.token_urlsafe(16)
    session['target_url'] = request.args.get('next', '/dashboard')  # 保存目标地址
    
    redirect_uri = url_for('authorize', _external=True)
    return github.authorize_redirect(redirect_uri, state=session['state'])

@app.route('/authorize')
def authorize():
    # 验证state参数
    if request.args.get('state') != session.get('state'):
        return 'State验证失败', 400
    
    token = github.authorize_access_token()
    # 这里获取用户信息...
    
    # 跳转到之前保存的目标地址
    target_url = session.pop('target_url', '/dashboard')
    return redirect(target_url)

@app.route('/dashboard')
def dashboard():
    return '登录成功,这是仪表板'

关键点:

  1. 在发起授权前,用session['target_url']保存要跳转的地址
  2. 回调时验证state确保请求合法
  3. 授权成功后从session取出目标地址进行跳转

如果不想用session,也可以把目标地址编码到state参数里一起传递,回调时再解析出来。

总结:用session保存跳转目标并在回调时取出使用。

第三方接口里有个回跳 uri 参数

2 楼正解。应该在第三方开发文档里找的到

回到顶部