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

AWS CloudFront部署应用后Google登录回调指向AWS IP而非域名问题

解决Google登录回调地址指向EC2域名的问题

问题根源

Laravel未正确识别CloudFront转发的真实请求域名,导致Socialite生成的Google回调URL使用了EC2内部域名而非自定义域名,进而触发InvalidStateException。stateless()模式用于解决无状态认证的Session问题,和回调地址生成逻辑无关,因此无法解决该问题。

解决方案

  1. 配置CloudFront转发关键请求头

    • 进入AWS CloudFront控制台,找到对应分发的行为设置。
    • 在「缓存键与源请求」中,配置自定义源请求策略,转发以下请求头至EC2:
      • Host
      • X-Forwarded-Proto
      • X-Forwarded-Host
    • 保存配置后等待CloudFront部署生效。
  2. 让Laravel信任CloudFront代理

    • 编辑config/trustedproxy.php,将CloudFront的IP段添加到proxies数组(生产环境建议使用官方公布的CloudFront IP范围,而非*):
      'proxies' => [
          '13.248.0.0/18', // 示例CloudFront IP段,需替换为实际范围
      ],
      'headers' => Illuminate\Http\Request::HEADER_X_FORWARDED_ALL,
      
    • 测试阶段可临时在.env中设置:
      TRUSTED_PROXIES=*
      
  3. 强制Laravel使用自定义域名生成URL

    • 在.env中设置正确的应用域名:
      APP_URL=https://your-custom-domain.com
      
    • 确保config/app.php中的url配置读取该环境变量:
      'url' => env('APP_URL', 'http://localhost'),
      
  4. 显式指定Google回调地址

    • 编辑config/services.php,为Google服务配置明确的回调URL,避免依赖自动生成:
      'google' => [
          'client_id' => env('GOOGLE_CLIENT_ID'),
          'client_secret' => env('GOOGLE_CLIENT_SECRET'),
          'redirect' => env('GOOGLE_REDIRECT_URI', 'https://your-custom-domain.com/auth/google/callback'),
      ],
      
    • 同时在Google开发者控制台的OAuth 2.0设置中,将该回调地址添加至授权回调列表。

优化后的Socialite代码(可选)

配置生效后,无需保留stateless()(若业务不需要无状态认证):

public function redirectGoogleLogin()
{
    return Socialite::driver('google')->redirect();
}

public function callbackGoogleLogin()
{
    $socialUser = Socialite::driver('google')->user();
    // 后续业务逻辑
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 23:32:36