middleware('guest')->except('logout'); } public function redirectToProvider($provider) { return Socialite::driver($provider)->redirect(); } /** * @param $provider * @return \Illuminate\Http\RedirectResponse */ public function handleProvideCallback($provider) { try { $user = Socialite::driver($provider)->user(); }catch (Exception $e) { return redirect()->back(); } $authUser = $this->findOrCreateUser($user, $provider); Auth()->login($authUser, true); return redirect()->route('home'); } /** * @param $socialUser * @param $provider * @return mixed */ public function findOrCreateUser($socialUser, $provider) { $socialAccount = UserAccount::where('provider_id', $socialUser->getId()) ->where('provider_name', $provider) ->first(); if ($socialAccount) { return $socialAccount->user; } else { $user = UserAccount::where('email', $socialUser->getEmail())->first(); if (! $user) { $user = UserAccount::create([ 'name' => $socialUser->getName(), 'email' => $socialUser->getEmail(), 'provider_id' => $socialUser->getId(), 'provider_name' => $provider ]); } return $user; } } }