示例#1
0
 public function confirmEmail(UserEntityInterface $user, string $emailConfirmationToken) : UserEntityInterface
 {
     if ($user->isEmailConfirmed()) {
         throw new EmailAlreadyConfirmedException();
     } elseif ($user->hasEmailConfirmationTokenExpired()) {
         throw new EmailConfirmationTokenExpiredException();
     } elseif ($user->hasTooManyEmailConfirmationTokenAttempts()) {
         throw new TooManyEmailConfirmationTokenAttemptsException();
     }
     /** @var UserRepositoryInterface $userRepository */
     $userRepository = $this->container->get(UserRepositoryInterface::class);
     if ($user->getEmailConfirmationToken() !== $emailConfirmationToken) {
         $user->setEmailConfirmationTokenAttempts($user->getEmailConfirmationTokenAttempts() + 1);
         $userRepository->save($user);
         throw new InvalidEmailConfirmationTokenException();
     }
     $user->setIsEmailConfirmed(true);
     $user->setEmailConfirmationToken(null);
     $user->setEmailConfirmationTokenAttempts(0);
     $user->setEmailConfirmationTokenExpirationDatetime(null);
     $userRepository->save($user);
     return $user;
 }