public function onSuccess()
 {
     $v = $this->getValues();
     /** @var Auth $presenter */
     $presenter = $this->presenter;
     try {
         $userEntity = $this->orm->users->getByEmail($v->email);
         if ($userEntity && !$userEntity->registered) {
             $presenter->redirect('Auth:registration', ['email' => $v->email]);
         }
         $guest = NULL;
         if ($presenter->user->isPersistedGuest()) {
             // If guest user is persisted, link to it
             // locally so we dont override it with login.
             $guest = $presenter->getUserEntity();
         }
         $presenter->user->login($v->email, $v->password);
         if ($guest && $guest instanceof User) {
             $this->userMerger->mergeUserInto($guest, $presenter->getUserEntity());
             $this->orm->flush();
         }
         $presenter->onLogin($userEntity, NULL, 'password');
     } catch (AuthenticationException $e) {
         $presenter->flashError($e->getMessage());
     }
 }
 /**
  * @param StdClass|ProfileInfo $me
  * @param callable $findById
  * @param callable $update
  * @param NULL|string $service for logging
  * @return User
  */
 private function registerOrLogin($me, $findById, $update, $service = NULL)
 {
     /** @var User $userEntity */
     $userEntity = $findById($me->id);
     $newUser = FALSE;
     if (!$userEntity) {
         $userEntity = $this->orm->users->getByEmail($me->email);
     }
     if (!$userEntity) {
         $newUser = TRUE;
         $userEntity = new User();
         $this->orm->users->attach($userEntity);
         $userEntity->email = Strings::lower($me->email);
     }
     $isGoogle = $me instanceof ProfileInfo;
     $firstName = $isGoogle ? $me->givenName : $me->{'first_name'};
     $userEntity->gender = $me->gender ?: $this->orm->users->getGender($firstName);
     $userEntity->name = $me->name;
     $userEntity->familyName = $isGoogle ? $me->familyName : $me->{'last_name'};
     $userEntity->firstName = $firstName;
     $userEntity->avatar = $isGoogle ? "{$me->picture}?sz=100" : "https://graph.facebook.com/{$me->id}/picture/?type=square&height=50&width=50";
     // intentionally 50, fb returns 2x
     $update($userEntity, $me);
     $guest = NULL;
     if ($this->user->getId() && !$this->userEntity->registered) {
         $guest = $this->userEntity;
     }
     $this->orm->flush();
     $this->user->login(new Identity($userEntity->id));
     if ($newUser) {
         $this->iLog("auth.registration.{$service}");
     }
     if ($guest) {
         $this->userMerger->mergeUserInto($guest, $userEntity);
     }
     $this->orm->flush();
     $this->onLogin($userEntity, $newUser, $service);
 }