Я использую socialite для входа в систему пользователя вместе с аутентификацией на основе форм.
После входа в систему пользователь должен быть перенаправлен на соответствующие им маршруты в зависимости от роли.
public function authenticated(Request $request, User $user)
{
// $role = Auth::user()->isRole();
$role = $user->role;
switch ($role) {
case 'admin':
return redirect()->route('admin');
break;
case 'manager':
return redirect()->route('manager');
break;
case 'customer':
break;
default:
return redirect()->route('admin');
}
}
public function handleProviderCallback($provider)
{
$socialUser = Socialite::driver($provider)->user();
$user = User::where(['email' => $socialUser->getEmail()])->first();
if($user){
Auth::login($user, true);
}else{
$user = User::create([
'name' => $socialUser->getName(),
'email' => $socialUser->getEmail(),
'avatar' => $socialUser->getAvatar(),
'provider_id' => $socialUser->getId(),
'provider' => $provider,
]);
Auth::login($user, true);
}
// return redirect($this->redirectTo);
// Instead
// Redirect based on role
}
Примечание. Я не хочу копировать содержимое метода authenticated () в handleProviderCallback () только для того, чтобы не повторяться. Есть ли способ вызвать метод authenticated () или я могу использовать промежуточное ПО RedirectIfAuthenticated?