protected function syncProviderUser($driver, $userProvider) { $userProviderId = $userProvider->getId(); $user = Auth::user(); $socialId = $driver . '_id'; $userAlreadyConnectedToProvider = User::where($socialId, '=', $userProviderId)->first(); if ($userAlreadyConnectedToProvider) { Auth::loginUsingId($userAlreadyConnectedToProvider->id); } elseif (Auth::check()) { $this->connectUsertoProvider($user, $socialId, $userProviderId); } else { $request = ['email' => $userProvider->getEmail() ?: $userProviderId . '@' . $driver, 'password' => str_random(10), 'name' => $userProvider->getName(), 'is_validate' => $userProvider->getEmail() ? '1' : '0']; $userService = new UserService(); $item = $userService->store($request, ucfirst($driver)); $user = $item['user']; $userService->makeAvatarFor($user, $userProvider->getAvatar()); $this->connectUsertoProvider($user, $socialId, $userProviderId); Auth::loginUsingId($user->id); } return redirect()->route('user.ad.index'); }