You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

获取Google OAuth2访问令牌时遇重定向URI不匹配问题求助

解决Google OAuth2重定向URI不匹配问题

我之前也碰到过这个一模一样的问题,咱们一步步拆解排查解决:

核心原因

这个问题的本质是Google Cloud控制台里配置的「已授权重定向URI」,和你代码实际请求时使用的URI完全不一致——Google的OAuth2机制对这个匹配要求极其严格,从协议(http/https)、域名、端口到路径,甚至结尾的斜杠都必须分毫不差。

第一步:先搞清楚你实际在用的重定向URI

当你调用auth2.grantOfflineAccess()时,如果没手动指定redirect_uri参数,Google会默认把当前页面的完整URL作为重定向URI。你可以先在回调函数里打印错误详情,直接看到Google预期的URI和你实际发送的URI:

function signInCallback(authResult) {
  if (authResult.error) {
    console.log("OAuth错误详情:", authResult.error_details);
    // 这里会明确显示"预期的URI列表"和"实际收到的URI"
  }
}

第二步:在Google Cloud控制台修正配置

  1. 登录你的Google Cloud控制台,找到对应项目,进入API和服务凭据页面
  2. 找到代码里client_id对应的那个「OAuth 2.0客户端ID」
  3. 在「已授权的重定向URI」区域,添加你从错误日志里看到的实际URI;如果想手动指定固定URI,要满足两个要求:
    • 必须属于你当前项目的授权域名(本地开发可以用http://localhost:端口号http://127.0.0.1:端口号
    • 要和代码里的参数完全一致,比如修改调用代码:
      auth2.grantOfflineAccess({ redirect_uri: 'http://localhost:3000/auth/google/callback' })
        .then(signInCallback);
      
      这时候就必须把http://localhost:3000/auth/google/callback准确添加到控制台的授权列表里。

容易踩坑的细节要注意

  • 本地开发时,localhost127.0.0.1是两个不同的URI,不要混用
  • 端口号不能漏:比如本地服务跑在3000端口,就必须写全http://localhost:3000,不能只写http://localhost
  • 生产环境必须用HTTPS(localhost例外),Google不允许非HTTPS的重定向URI
  • 路径要完全匹配:比如代码里是/callback,控制台就不能写成/callback/(多了结尾斜杠)

最后验证

修改完控制台配置后,记得等1-2分钟(Google的配置同步需要一点时间),然后重新测试代码,应该就能解决重定向URI不匹配的问题了。

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

火山引擎 最新活动