生产环境Google OAuth2 redirect_uri不匹配错误,本地运行正常
解决Google OAuth2生产环境invalid redirect_url错误
问题核心
本地运行时,Google Drive令牌交换流程正常,但部署到服务器后触发invalid redirect_url错误,核心原因是代码中硬编码的重定向地址与生产环境不匹配,且未在Google OAuth配置中注册生产环境的重定向URI。
原因分析
- OAuth2授权码流程要求:获取授权码时使用的redirect_uri和交换令牌时使用的redirect_uri必须完全一致,且该URI必须在Google Cloud Console的OAuth客户端配置中提前注册。
- 代码中
REDIRECT_URL硬编码为http://localhost:3000,仅适用于本地开发;生产环境前端的实际域名(如https://your-production-domain.com)与该地址不匹配,导致Google验证失败。
解决方案
1. 动态配置重定向地址,避免硬编码
将固定的localhost地址改为通过环境变量配置,适配不同运行环境:
import os # 本地开发用默认值,生产环境通过环境变量传入实际地址 REDIRECT_URL = os.getenv("GOOGLE_OAUTH_REDIRECT_URI", "http://localhost:3000")
生产环境部署时,设置环境变量为前端实际的回调地址(如https://your-app.com/google-drive-callback)。
2. 在Google Cloud Console注册生产环境的重定向URI
- 登录Google Cloud Console,找到你的OAuth 2.0客户端ID配置页面
- 在「已授权的重定向URI」列表中,添加生产环境的完整回调地址(必须和代码中使用的地址完全一致,包括HTTP/HTTPS、域名、端口、路径)
- 保存配置后,等待5-10分钟让配置生效(Google的配置同步存在延迟)
3. 确保授权请求与令牌交换的redirect_uri一致
检查前端发起Google授权请求时使用的redirect_uri,必须和后端交换令牌时的REDIRECT_URL完全相同,不能出现本地地址和生产地址混用的情况。
额外注意点
- 生产环境必须使用HTTPS(localhost除外),Google OAuth2不允许非HTTPS的生产域名作为重定向地址
- 调试时可以打印Google返回的错误详情,获取更具体的提示:
print(token_json) # 调试完成后记得移除该代码
内容的提问来源于stack exchange,提问作者Devanshu Shresth
相关产品推荐
相关产品推荐

