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

Rails 7 API集成Google登录遇redirect_uri_mismatch错误求助

排查Google OAuth2 redirect_uri_mismatch问题的关键步骤

针对你遇到的Rails 7 API换Google access token时的redirect_uri_mismatch错误,按以下步骤逐一排查:

1. 严格校验URI的完全一致性

Google对重定向URI的匹配是字节级严格匹配,必须确保以下三处完全一致:

  • Google控制台「已授权的重定向URI」列表中的地址
  • 获取授权码时,前端/授权请求中使用的redirect_uri参数
  • 换token时代码中传入的redirect_uri参数

重点检查:

  • 是否存在大小写差异(比如Callback和callback)
  • 结尾是否多了/少了斜杠(比如/callback和/callback/)
  • HTTP/HTTPS协议是否一致(比如本地用http,控制台不能写成https)
  • 是否有多余的空格或特殊字符(比如URI里的空格是否被正确编码)

2. 确认Google控制台的配置位置

  • 确保你配置的是对应项目下的OAuth 2.0客户端ID,而非其他项目或客户端
  • 客户端类型必须是「Web应用」,不能选iOS/Android等其他类型
  • 重定向URI是添加在「已授权的重定向URI」列表中,而非「已授权的JavaScript来源」(后者用于前端授权场景)

3. 验证授权码与URI的绑定关系

每个授权码在生成时就和当时使用的redirect_uri绑定,换token时必须使用同一个URI。如果你的测试流程是:

  1. 用http://localhost:3000/...获取授权码
  2. 换token时用https://ngrok.io/...
    这种情况必然触发错误,必须重新获取对应URI的授权码再测试。

4. 检查环境变量是否正确加载

在代码中添加调试代码,确认ENV['REDIRECT_URI']的实际值:

def self.get_access_token(auth_code)
  puts "Loaded REDIRECT_URI: #{ENV['REDIRECT_URI']}" # 新增调试打印
  # ... 原有代码
end

确认输出的URI和控制台配置的完全一致,排除.env文件中的拼写错误、引号包裹或转义问题。

5. 查看Google错误响应的详细信息

打印完整的错误响应,查看error_description字段(如果存在),Google通常会明确说明它收到的URI和允许的URI分别是什么:

{
  "error": "redirect_uri_mismatch",
  "error_description": "Bad Request: Redirect URI mismatch. Expected one of https://xxx.ngrok.io/..., got http://localhost:3000/..."
}

这能直接帮你定位差异点。

6. 清除旧授权码并重新测试

不要使用之前生成的旧授权码,每次测试都重新发起授权流程获取新的授权码,避免旧码绑定了错误的URI。

7. 验证Faraday请求的实际参数

打印Faraday生成的请求body,确认redirect_uri参数是否正确:

def self.get_access_token(auth_code)
  body = URI.encode_www_form(
    code: auth_code,
    client_id: ENV['GOOGLE_CLIENT_ID'],
    client_secret: ENV['GOOGLE_CLIENT_SECRET'],
    grant_type: 'authorization_code',
    redirect_uri: ENV['REDIRECT_URI']
  )
  puts "Request body: #{body}" # 新增调试打印
  conn = Faraday.new
  response = conn.post(ENV['GOOGLE_AUTHORIZATION_URL']) do |req|
    req.headers['Content-Type'] = 'application/x-www-form-urlencoded'
    req.body = body
  end
  # ... 原有代码
end

确认redirect_uri参数的值和预期一致,没有被错误编码或截断。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 04:22:46