You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Google OAuth登录回调报Unauthorized TokenError的修复求助

Google OAuth 回调报 TokenError: Unauthorized 排查修复

按照问题出现的概率从高到低定位:

  • 第一处手滑导致的配置错误(核心报错原因)
    当前Google策略配置中,clientSecret字段错误引用了和clientID完全相同的环境变量值:
    原错误代码片段:
    new GoogleStrategy(
      {
        clientID: process.env.GOOGLE_CLIENT_ID,
        clientSecret: process.env.GOOGLE_CLIENT_ID, // 这里写错了
        callbackURL: "http://localhost:3000/auth/google/callback"
      },
      // 回调处理逻辑
    )
    
    这种情况下传给Google的客户端密钥是错的,身份校验环节会直接拒绝请求,触发Unauthorized报错。
    修正为:单独读取客户端密钥对应的环境变量
    clientID: process.env.GOOGLE_CLIENT_ID,
    clientSecret: process.env.GOOGLE_CLIENT_SECRET,
    callbackURL: "http://localhost:3000/auth/google/callback"
    
  • 会话存储配置不兼容导致的校验失败
    你当前的会话初始化代码里,MongoStore的传参不符合官方要求,直接把字符串连接串传给了mongooseConnection配置项,会导致OAuth流程依赖的临时state参数无法正常存储校验,后续也会触发权限错误。
    修正步骤:
    1. 确认安装connect-mongo依赖
    2. 引入MongoStore模块,替换原有错误的存储配置:
      const MongoStore = require('connect-mongo');
      app.use(
        session({
          secret: "our-passport-local-strategy-app",
          store: MongoStore.create({
            mongoUrl: 'mongodb://localhost/localpassport'
          }),
          resave: true,
          saveUninitialized: true
        })
      );
      
  • 交叉核对容易遗漏的配置项
    • 确认项目入口文件最顶部引入了require('dotenv').config(),否则本地写在.env文件里的客户端ID、密钥根本不会被读取到,最终传给Google的配置全是undefined
    • 确认Google OAuth应用后台配置的授权回调地址,和代码里的callbackURL完全一致,没有漏写端口、写错协议、多写末尾斜杠的差异
    • 本地调试时不要把回调地址写成https开头,Google本地调试场景下需要和代码里的http地址完全匹配

内容的提问来源于stack exchange,提问作者Carlos Riojas

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.24 02:24:00