NextAuth集成Google OAuth在Heroku部署遇redirect_uri_mismatch错误
问题原因及解决方法
原因分析
- NextAuth未正确识别生产环境域名:NextAuth依赖
NEXTAUTH_URL环境变量生成OAuth回调地址,Heroku部署时如果未配置该变量或变量值错误,NextAuth会默认使用本地开发的http://localhost:3000作为回调地址,导致Google OAuth返回redirect_uri_mismatch错误。 - 手动指定redirect_uri配置错误:你之前手动设置的
redirect_uri未对应Heroku的生产域名,或者登录后的跳转逻辑仍指向localhost,导致登录后无法在Heroku应用保持会话。
解决步骤
- 配置Heroku的NEXTAUTH_URL环境变量
进入Heroku应用的「设置」页面,找到「Config Vars」,添加键为NEXTAUTH_URL,值为你的Heroku应用完整HTTPS域名(例如https://app_name.herokuapp.com)。Vercel会自动识别部署域名,无需额外设置。 - 验证Google Cloud Console的重定向URI
登录Google Cloud Console,找到对应的OAuth 2.0 Client ID,确保重定向URI列表中包含https://app_name.herokuapp.com/api/auth/callback/google,域名和协议要与NEXTAUTH_URL完全一致。 - 移除Google Provider中的手动redirect_uri配置
删掉NextAuth配置里Google Provider的redirect_uri参数,让NextAuth自动基于NEXTAUTH_URL生成正确的回调地址,避免硬编码导致的环境不匹配。 - 确认环境变量生效
可以通过Heroku日志查看应用启动时是否加载了正确的NEXTAUTH_URL,或者在应用代码中临时打印process.env.NEXTAUTH_URL验证值是否正确。
内容的提问来源于stack exchange,提问作者Killian Gemoets
相关产品推荐
相关产品推荐

