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

Laravel Socialite如何配置多组Google OAuth凭证实现多域登录需求?

多域名Google登录实现方案

Laravel Socialite 完全支持传入多组不同的Google OAuth凭证适配多域名登录需求,常用实现方案有两种:


方案1:动态覆盖默认配置(适合域名数量较少的场景)

无需修改原有默认配置,只需在跳转登录和回调逻辑中,根据当前访问域名动态替换凭证参数即可。

  1. 先在.env文件中添加多组域名对应的凭证:
# 域名1配置
GOOGLE_CLIENT_ID_DOMAIN1=xxx
GOOGLE_CLIENT_SECRET_DOMAIN1=xxx
GOOGLE_REDIRECT_URI_DOMAIN1=https://domain1.com/auth/google/callback

# 域名2配置
GOOGLE_CLIENT_ID_DOMAIN2=xxx
GOOGLE_CLIENT_SECRET_DOMAIN2=xxx
GOOGLE_REDIRECT_URI_DOMAIN2=https://domain2.com/auth/google/callback
  1. 修改跳转登录逻辑:
public function redirect(){
    $currentHost = request()->getHost();
    // 按当前域名匹配对应凭证
    $googleConfig = match($currentHost) {
        'domain1.com' => [
            'client_id' => env('GOOGLE_CLIENT_ID_DOMAIN1'),
            'client_secret' => env('GOOGLE_CLIENT_SECRET_DOMAIN1'),
            'redirect' => env('GOOGLE_REDIRECT_URI_DOMAIN1'),
        ],
        'domain2.com' => [
            'client_id' => env('GOOGLE_CLIENT_ID_DOMAIN2'),
            'client_secret' => env('GOOGLE_CLIENT_SECRET_DOMAIN2'),
            'redirect' => env('GOOGLE_REDIRECT_URI_DOMAIN2'),
        ],
        default => config('services.google')
    };
    // 动态覆盖默认配置
    config(['services.google' => $googleConfig]);

    return Socialite::driver('google')
        ->scopes(['https://apps-apis.google.com/a/feeds/groups/', \Google_Service_Directory::ADMIN_DIRECTORY_USER_READONLY])
        ->stateless()->redirect();
}
  1. 回调逻辑中也要加入相同的动态配置逻辑,避免校验不通过:
public function callback(){
    $currentHost = request()->getHost();
    $googleConfig = match($currentHost) {
        'domain1.com' => [
            'client_id' => env('GOOGLE_CLIENT_ID_DOMAIN1'),
            'client_secret' => env('GOOGLE_CLIENT_SECRET_DOMAIN1'),
            'redirect' => env('GOOGLE_REDIRECT_URI_DOMAIN1'),
        ],
        'domain2.com' => [
            'client_id' => env('GOOGLE_CLIENT_ID_DOMAIN2'),
            'client_secret' => env('GOOGLE_CLIENT_SECRET_DOMAIN2'),
            'redirect' => env('GOOGLE_REDIRECT_URI_DOMAIN2'),
        ],
        default => config('services.google')
    };
    config(['services.google' => $googleConfig]);

    $user = Socialite::driver('google')->stateless()->user();
    // 后续自行处理登录逻辑
}

方案2:注册多组自定义驱动(适合域名较多、需长期维护的场景)

直接在服务提供者中注册多个对应不同域名的Google驱动,使用时按域名选择对应驱动即可。

  1. 在App\Providers\AppServiceProvider.php的boot方法中注册自定义驱动:
public function boot()
{
    // 注册域名1的Google驱动
    Socialite::extend('google_domain1', function ($app) {
        $config = $app['config']['services.google_domain1'];
        return Socialite::buildProvider(\Laravel\Socialite\Two\GoogleProvider::class, $config);
    });

    // 注册域名2的Google驱动
    Socialite::extend('google_domain2', function ($app) {
        $config = $app['config']['services.google_domain2'];
        return Socialite::buildProvider(\Laravel\Socialite\Two\GoogleProvider::class, $config);
    });
}
  1. 在config/services.php中添加多组配置:
return [
    // 原有默认配置
    'google' => [
        'client_id' => env('GOOGLE_CLIENT_ID'),
        'client_secret' => env('GOOGLE_CLIENT_SECRET'),
        'redirect' => env('GOOGLE_REDIRECT_URI'),
    ],
    // 域名1配置
    'google_domain1' => [
        'client_id' => env('GOOGLE_CLIENT_ID_DOMAIN1'),
        'client_secret' => env('GOOGLE_CLIENT_SECRET_DOMAIN1'),
        'redirect' => env('GOOGLE_REDIRECT_URI_DOMAIN1'),
    ],
    // 域名2配置
    'google_domain2' => [
        'client_id' => env('GOOGLE_CLIENT_ID_DOMAIN2'),
        'client_secret' => env('GOOGLE_CLIENT_SECRET_DOMAIN2'),
        'redirect' => env('GOOGLE_REDIRECT_URI_DOMAIN2'),
    ],
];
  1. 使用时按域名选择对应驱动即可:
public function redirect(){
    $driver = match(request()->getHost()) {
        'domain1.com' => 'google_domain1',
        'domain2.com' => 'google_domain2',
        default => 'google'
    };
    return Socialite::driver($driver)
        ->scopes(['https://apps-apis.google.com/a/feeds/groups/', \Google_Service_Directory::ADMIN_DIRECTORY_USER_READONLY])
        ->stateless()->redirect();
}

注意事项

  • 所有使用的回调地址都需要提前在Google Cloud控制台的OAuth凭证配置中加入授权重定向URI,否则会报redirect_uri_mismatch错误。
  • 若使用通配符域名,可以直接在Google控制台配置通配符回调地址,配合动态拼接redirect参数使用,不需要单独配置多组凭证,实现更简单。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 06:27:03