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; }