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

使用Authlib对接GitHub时出现redirect_uri匹配异常问题求助

解决GitHub OAuth重定向URI不匹配(时好时坏)的问题

核心原因:动态生成的redirect_uri存在Host不一致问题

你的代码里用url_for('oauth.authorize', _external=True)生成回调地址,这个方法会根据当前请求的Host(比如浏览器地址栏里的localhost:5000或127.0.0.1:5000)拼接完整URL。但GitHub后台只注册了http://127.0.0.1:5000/complete,如果某次请求的Host是localhost,生成的回调地址就会变成http://localhost:5000/complete,和注册地址不匹配,触发redirect_uri_mismatch错误;而用127.0.0.1访问时就正常,这就导致了“有时成功有时失败”的现象。

解决方案

1. 直接使用固定的回调地址(最稳妥)

把动态生成的redirect_uri替换成你在GitHub注册的固定地址,避免Host变化带来的问题:

@bp.route('/alogin')
def login():
    # 直接使用GitHub后台注册的回调URL
    redirect_uri = "http://127.0.0.1:5000/complete"
    return oauth.github.authorize_redirect(redirect_uri)

2. 强制Flask生成固定Host的URL

在Flask应用初始化代码中设置SERVER_NAME,让url_for生成的外部URL固定使用注册的Host:

# 配置Flask应用
app.config['SERVER_NAME'] = '127.0.0.1:5000'

注意:这个配置会影响所有路由的外部URL生成,若需支持其他Host访问,此方法可能不适用。

3. 检查GitHub回调URL的细节

确认GitHub开发者设置里的回调URL没有多余斜杠或大小写问题,比如确保是http://127.0.0.1:5000/complete而非http://127.0.0.1:5000/complete/(末尾多斜杠)。

额外验证步骤

修改代码后,可在login函数中保留print(redirect_uri),确认每次生成的地址都和GitHub注册的完全一致,排除动态生成的不确定性。

内容的提问来源于stack exchange,提问作者Kirill Stepankov

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 21:05:10