/**
  * @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;
 }
Example #3
0
 /**
  * Create a new user instance after a valid registration.
  *
  * @param array $data
  *
  * @return User
  */
 protected function create(array $data)
 {
     return $this->registrar->create($data);
 }