/** * @param $provider * @param AbstractUser $providerUser * * @return User * * @internal param \Laravel\Socialite\Two\User $user */ public function create($provider, AbstractUser $providerUser) { $name = explode(' ', $providerUser->getName()); $userData = ['first_name' => $name[0], 'last_name' => isset($name[1]) ? $name[1] : '', 'email' => $providerUser->getEmail(), 'avatar' => $providerUser->getAvatar(), 'status' => User::STATUS_CONFIRMED]; DB::beginTransaction(); $user = $this->registrar->create($userData); $userProvider = App::make(UserProvider::class, [['provider' => $provider, 'provider_id' => $providerUser->getId()]]); $user->providers()->save($userProvider); DB::commit(); return $user; }
/** * Find the existing user or create a new one for this account. * * @param $provider * * @throws EmailAlreadyInUse * * @return User */ public function findOrCreateUser($provider) : User { /** @var \Laravel\Socialite\Two\User $providerUser */ $providerUser = $this->socialite->driver($provider)->user(); $user = User::byProvider($provider, $providerUser->id)->first(); if (is_null($user)) { $user = User::where('email', $providerUser->getEmail())->first(); // If provider isn't associated with user, do that now if (is_null($user)) { return $this->registrar->create($provider, $providerUser); } $userProvider = app(UserProvider::class, [['provider' => $provider, 'provider_id' => $providerUser->getId()]]); $user->providers()->save($userProvider); return $user; } // update the avatar if it has changed if (!is_null($providerUser->getAvatar()) && $user->avatar != $providerUser->getAvatar()) { $user->update(['avatar' => $providerUser->getAvatar()]); } return $user; }
/** * Create a new user instance after a valid registration. * * @param array $data * * @return User */ protected function create(array $data) { return $this->registrar->create($data); }