使用Google Plus API与Passport,Heroku上遇redirect_uri_mismatch错误
解决Heroku部署后Google OAuth的redirect_uri_mismatch错误
Hey there, 这个问题我之前部署OAuth应用到Heroku时也踩过坑,核心原因很明确:你在Google Cloud控制台配置的OAuth客户端授权URI里,没有包含Heroku部署后的完整回调地址。
本地运行时,你的应用回调地址是基于localhost的,已经在Google凭证里授权过了,所以没问题;但部署到Heroku后,回调地址变成了http://discuss-my-anime.herokuapp.com/auth/google/redirect,这个地址不在Google的授权列表里,自然就抛出redirect_uri_mismatch错误了。
下面是具体的解决步骤:
1. 更新Google OAuth凭证的授权重定向URI
打开Google Cloud控制台,找到你对应的Google Plus API客户端凭证,进入编辑页面:
- 在「已授权的重定向URI」区域,点击「添加URI」
- 输入Heroku环境下的完整回调地址:
http://discuss-my-anime.herokuapp.com/auth/google/redirect - 建议同时添加HTTPS版本(如果你的Heroku应用已经配置了SSL):
https://discuss-my-anime.herokuapp.com/auth/google/redirect - 保存所有修改,注意:Google的配置变更可能需要1-2分钟才会生效,别着急立刻测试。
2. 优化代码中的callbackURL配置(可选但推荐)
看你的代码里callbackURL用的是相对路径/auth/google/redirect,Passport虽然会自动结合当前请求域名生成完整地址,但为了避免环境差异导致的意外问题,可以改成根据环境变量动态设置:
passport.use( new GoogleStrategy({ // 动态设置回调地址,适配本地和生产环境 callbackURL: process.env.NODE_ENV === 'production' ? 'https://discuss-my-anime.herokuapp.com/auth/google/redirect' : '/auth/google/redirect', clientID: keys.google.clientID, clientSecret: keys.google.clientSecret }, // ... 后续代码不变 ) );
这样本地开发时用相对路径,生产环境直接指定Heroku的绝对地址,逻辑更清晰。
3. 重新部署并测试
把修改后的代码推送到Heroku,重启应用后再测试Google登录流程,这个错误应该就彻底解决了。
额外注意点
- 确认你修改的是当前应用使用的那个OAuth客户端凭证,别选错了项目或者客户端ID;
- 如果还是报错,检查浏览器地址栏里的回调地址是否和你配置的完全一致(包括HTTP/HTTPS、域名、路径,大小写也要注意)。
内容的提问来源于stack exchange,提问作者AMT
相关产品推荐
相关产品推荐

