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')明确指定要使用你配置的自定义守卫。 - 新用户创建完成后的登录逻辑也要做同样的修改,确保会话是基于
userguard创建的。
另外,如果之后需要在其他地方获取当前登录的user guard用户,可以用Auth::guard('user')->user()来获取,而不是默认的Auth::user()。
内容的提问来源于stack exchange,提问作者user3653474
相关产品推荐
相关产品推荐

