Fastify集成Passport的GoogleStrategy出现invalid_grant错误如何解决?
排查与解决方案
invalid_grant 错误是Google OAuth服务在使用授权码兑换AccessToken时返回的错误,按以下优先级排查:
核心排查点
- 回调地址完全不匹配(最高概率)
你的配置中callbackURL仅填写了相对路径/google/callback,而Google要求回调地址必须和你在Google Cloud Console中填写的「已授权重定向URI」完全一致,包括协议、域名、端口、路径。
修复:将passport配置中的callbackURL改为完整路径:
同时确认Google Cloud Console对应OAuth客户端的「已授权重定向URI」中已经添加了完全相同的地址,无多余斜杠、大小写差异。callbackURL: "http://localhost:8070/google/callback" - 授权码被重复使用/过期
回调携带的code仅可使用一次,有效期仅几分钟,如果你刷新了回调页面、多次使用同一个code、或者登录流程间隔太久,都会触发该错误。
修复:清除浏览器localhost域名下的所有缓存、cookie,关闭浏览器重新打开,从头走登录流程,不要点击浏览器后退或刷新回调页面。 - 环境变量加载错误
确认process.env.GOOGLE_CLIENT_ID和process.env.GOOGLE_CLIENT_SECRET被正确加载,你可以在初始化GoogleStrategy前加一行打印代码验证:
检查输出值是否和Google Cloud Console中的凭证完全一致,无多余空格、字符遗漏,确认dotenv配置正确,.env文件位于项目根目录。console.log('ClientID:', process.env.GOOGLE_CLIENT_ID, 'ClientSecret:', process.env.GOOGLE_CLIENT_SECRET) - OAuth同意屏幕配置问题
如果你的Google OAuth应用状态为「测试中」,只有在同意屏幕的「测试用户」列表内的账号才可以登录,未添加的账号登录会触发该错误。另外如果选择了「内部」用户类型,仅同组织账号可登录。
修复:将测试用的Google账号添加到「测试用户」列表,或者将应用发布为正式版。
兜底排查点
如果以上步骤都无效,执行以下操作:
- 删除
node_modules和package-lock.json,重新执行npm install安装依赖,确认passport-google-oauth20和@fastify/passport为兼容的最新版本 - 检查本地设备的系统时间是否和标准时间一致,时间偏差过大也会导致OAuth签名校验失败
- 确保你登录的Google账号没有被限制、没有开启特殊的安全设置阻断OAuth授权
内容的提问来源于stack exchange,提问作者5war00p
相关产品推荐
相关产品推荐

