|
- <?php
-
- namespace App\Http\Controllers\Auth;
-
- use App\Models\UserAccount;
- use App\Http\Controllers\Controller;
- use Illuminate\Support\Facades\Auth;
- use App\Providers\RouteServiceProvider;
- use Exception;
- use Laravel\Socialite\Facades\Socialite;
- use Illuminate\Foundation\Auth\AuthenticatesUsers;
-
- class LoginController extends Controller
- {
- /*
- |--------------------------------------------------------------------------
- | Login Controller
- |--------------------------------------------------------------------------
- |
- | This controller handles authenticating users for the application and
- | redirecting them to your home screen. The controller uses a trait
- | to conveniently provide its functionality to your applications.
- |
- */
-
- use AuthenticatesUsers;
-
- /**
- * Where to redirect users after login.
- *
- * @var string
- */
- protected $redirectTo = RouteServiceProvider::HOME;
-
- /**
- * Create a new controller instance.
- *
- * @return void
- */
- public function __construct()
- {
- $this->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;
-
- }
- }
- }
|