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

Google认证在开发/预发布环境正常,生产环境报redirect_uri_mismatch求助

解决Rails + Devise + Omniauth-Google-OAuth2生产环境redirect_uri_mismatch问题

以下是针对生产环境出现Error 400: redirect_uri_mismatch的排查和修复步骤:

  • 核对URI的细节一致性
    Google OAuth对重定向URI的大小写、拼写要求严格,哪怕是细微差别都会触发不匹配错误。仔细对比生产环境实际请求的https://<production_domain>/users/auth/google_oauth2/callback和Google控制台中添加的URI:

    • 确认域名拼写完全一致,没有多/少字符、错误的子域名
    • 检查路径部分:/users/auth/google_oauth2/callback的下划线、斜杠都要完全匹配,比如别把google_oauth2写成google-oauth2
    • 确认协议是https,没有写成http或者遗漏s
  • 验证凭证与项目的对应关系
    检查生产环境使用的Google客户端ID、客户端密钥,是否属于Google控制台中添加了正确重定向URI的那个项目。如果不小心混用了staging环境的凭证,就会出现URI不匹配的情况。

  • 排查反向代理/负载均衡的影响
    如果生产环境使用了Nginx、Apache等反向代理,或者有负载均衡,可能会导致Rails获取到的请求协议/域名和实际外部访问的不一致,进而让Omniauth生成错误的redirect_uri:

    • 查看Rails生产日志(log/production.log),搜索redirect_uri字段,确认实际发送给Google的URI是否正确
    • 在config/environments/production.rb中强制设置正确的域名和协议:
      config.action_controller.default_url_options = { host: '<production_domain>', protocol: 'https' }
      
    • 也可以在Omniauth配置中手动指定redirect_uri,避免自动生成错误:
      Devise.setup do |config|
        config.omniauth :google_oauth2, 
                        ENV['GOOGLE_CLIENT_ID'], 
                        ENV['GOOGLE_CLIENT_SECRET'],
                        scope: 'email,profile',
                        redirect_uri: 'https://<production_domain>/users/auth/google_oauth2/callback'
      end
      
  • 检查Google控制台的凭证类型
    确保在Google控制台中创建的是Web应用类型的OAuth凭证,并且重定向URI是添加在该Web应用的「已授权的重定向URI」列表中,不要误加到Android、iOS等其他类型的凭证配置里。

  • 清除缓存并重新部署
    Rails生产环境的配置缓存可能保留旧的设置,执行以下操作后重新部署:

    rails tmp:clear
    rails assets:precompile # 如果涉及静态资源变更
    

内容的提问来源于stack exchange,提问作者Kyryl Ωliinyk

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 13:03:23