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

Laravel中使用Socialite通过自定义user guard实现谷歌登录的方法

切换到自定义user Guard的Google登录实现

很简单,你只需要在使用Auth类进行登录时,明确指定要使用的user guard即可,Laravel的Auth系统支持通过guard()方法指定具体的守卫。下面是修改后的完整代码:

public function loginWithGoogle() {
    try {
        $googleUser = Socialite::driver('google')->user();
        // 查询用户(这里和原来逻辑一致,因为你的user guard的provider是users,所以User模型没问题)
        $user = User::where('google_id', $googleUser->id)->first();
        
        if($user){
            // 指定使用user guard登录
            Auth::guard('user')->login($user);
            return redirect('/home');
        } else{
            $createUser = User::create([
                'name' => $googleUser->name,
                'email' => $googleUser->email,
                'google_id' => $googleUser->id,
                'password' => encrypt('test@123')
            ]);
            // 同样,新用户登录时也指定user guard
            Auth::guard('user')->login($createUser);
            return redirect('/home');
        }
    } catch (Exception $exception) {
        // 建议这里不要用dd,换成更友好的错误处理,比如重定向到登录页并提示错误
        // return redirect()->route('login')->with('error', 'Google登录失败:'.$exception->getMessage());
        dd($exception);
    }
}

关键修改点说明:

  • 把原来的Auth::login($user)改成了Auth::guard('user')->login($user),通过guard('user')明确指定要使用你配置的自定义守卫。
  • 新用户创建完成后的登录逻辑也要做同样的修改,确保会话是基于user guard创建的。

另外,如果之后需要在其他地方获取当前登录的user guard用户,可以用Auth::guard('user')->user()来获取,而不是默认的Auth::user()。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 11:07:39