providers->isAllowed($provider), 404); abort_unless($this->providers->isEnabled($provider), 404); $this->redirector->rememberQueryTarget($request); return $this->driver($provider)->redirect(); } public function callback(Request $request, string $provider): RedirectResponse { abort_unless($this->providers->isAllowed($provider), 404); abort_unless($this->providers->isEnabled($provider), 404); try { $oauthUser = $this->driver($provider)->user(); } catch (Throwable) { return redirect()->route('login') ->withErrors(['email' => __('Social login failed. Please try again.')]); } if (! filled($oauthUser->getId())) { return redirect()->route('login') ->withErrors(['email' => __('Unable to read social account identity.')]); } $user = $this->resolveUser($provider, $oauthUser); Auth::guard('web')->login($user, true); $request->session()->regenerate(); return redirect()->intended(route('dashboard', absolute: false)); } private function resolveUser(string $provider, mixed $oauthUser): User { return SocialiteUser::resolveUser($provider, $oauthUser); } private function driver(string $provider): mixed { $driver = Socialite::driver($provider) ->redirectUrl(route('auth.social.callback', ['provider' => $provider], absolute: true)); if ($provider === 'apple' || (bool) config("services.{$provider}.stateless", false)) { return $driver->stateless(); } return $driver; } }