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 '登录成功,这是仪表板'
关键点:
- 在发起授权前,用
session['target_url']保存要跳转的地址 - 回调时验证state确保请求合法
- 授权成功后从session取出目标地址进行跳转
如果不想用session,也可以把目标地址编码到state参数里一起传递,回调时再解析出来。
总结:用session保存跳转目标并在回调时取出使用。
第三方接口里有个回跳 uri 参数
2 楼正解。应该在第三方开发文档里找的到

