部署到Heroku时报TypeError: OAuth2Strategy requires a clientID option如何解决
Heroku部署Passport谷歌OAuth报错TypeError: OAuth2Strategy requires a clientID option 解决方案
核心原因
本地运行时dotenv会读取项目根目录的.env文件注入环境变量,但Heroku默认不会同步本地.env文件的内容,也不会自动加载该文件,导致process.env.CLIENT_ID取值为空触发报错。
解决步骤
- 第一步:在Heroku平台配置对应环境变量
两种配置方式二选一即可:- 网页后台配置:登录Heroku控制台进入对应应用页,切换到「Settings」标签,找到「Config Vars」板块,点击「Reveal Config Vars」,分别添加
CLIENT_ID、CLIENT_SECRET两个key,填入你本地.env中对应的取值后保存。 - Heroku CLI配置:本地安装Heroku命令行工具后,在项目根目录执行以下命令:
配置完成后可执行heroku config:set CLIENT_ID=你的实际CLIENT_ID取值 CLIENT_SECRET=你的实际CLIENT_SECRET取值heroku config命令验证变量是否配置成功。 - 网页后台配置:登录Heroku控制台进入对应应用页,切换到「Settings」标签,找到「Config Vars」板块,点击「Reveal Config Vars」,分别添加
注意:不要将本地
.env文件提交到Git仓库,.gitignore中需要保留.env的排除规则,避免密钥泄露。
- 第二步:修正回调地址适配生产环境
你当前代码中回调地址写死为localhost,部署到Heroku后会出现回调不匹配问题,建议修改为动态适配环境的写法:
同时需要进入谷歌云控制台的OAuth 2.0客户端ID配置页面,将你的Heroku应用域名加入「授权重定向URI」列表。callbackURL: process.env.NODE_ENV === "production" ? "https://你的Heroku应用域名/auth/google/secrets" : "http://localhost:3000/auth/google/secrets" - 第三步:确认dotenv加载顺序
检查代码中require('dotenv').config()是否写在所有用到process.env变量的代码之前,必须放在Passport配置代码的顶部,确保变量加载完成后再执行认证逻辑。 - 第四步:重启应用生效
配置完成后执行heroku restart命令重启Heroku应用,或在网页后台点击重启按钮,确保新配置的环境变量生效。
内容的提问来源于stack exchange,提问作者guoxun Wu
相关产品推荐
相关产品推荐

