Skip to content

Commit

Permalink
Add lastVerificationEmailSentAt to BaseUser
Browse files Browse the repository at this point in the history
  • Loading branch information
jmeyo committed May 23, 2024
1 parent 67f156d commit ccd6a68
Show file tree
Hide file tree
Showing 2 changed files with 40 additions and 15 deletions.
41 changes: 26 additions & 15 deletions src/Controller/RegistrationController.php
Original file line number Diff line number Diff line change
Expand Up @@ -93,35 +93,46 @@ public function verifyUserEmail(
return $this->redirectToRoute('app_login');
}


#[Route('/verify/resend', name: 'app_verify_resend_email')]
public function resendVerifyEmail(
Request $request,
UserRepository $userRepository,
Mailer $mailer,
VerifyEmailHelperInterface $verifyEmailHelper
VerifyEmailHelperInterface $verifyEmailHelper,
EntityManagerInterface $entityManager
): Response {

$email = $request->query->get('email', '');

if ($request->isMethod('POST')) {
$email = $request->request->get('email');
$user = $userRepository->findOneBy(['email' => $email]);

if ($user && !$user->getIsVerified()) {
$signatureComponents = $verifyEmailHelper->generateSignature(
'app_verify_email',
$user->getId(),
$user->getEmail(),
['id' => $user->getId()]
);

$mailer->sendVerifyMessageToNewMember($user, $signatureComponents->getSignedUrl());

$this->addFlash('success', 'authenticate.flash.verifyEmail.emailSent');
return $this->redirectToRoute('app_verify_resend_email');
$now = new \DateTime();
$lastSent = $user->getLastVerificationEmailSentAt();

if ($lastSent && $lastSent->diff($now)->i < 30) {
$this->addFlash('error', 'You can only request a new verification email every 30 minutes.');
} else {
$signatureComponents = $verifyEmailHelper->generateSignature(
'app_verify_email',
$user->getId(),
$user->getEmail(),
['id' => $user->getId()]
);

$mailer->sendVerifyMessageToNewMember($user, $signatureComponents->getSignedUrl());

$user->setLastVerificationEmailSentAt($now);
$entityManager->flush();

$this->addFlash('success', 'authenticate.flash.verifyEmail.emailSent');
return $this->redirectToRoute('app_verify_resend_email', ['email' => $email]);
}
} else {
$this->addFlash('error', 'authenticate.flash.verifyEmail.emailNotFoundOrAlreadyVerified');
}

$this->addFlash('error', 'authenticate.flash.verifyEmail.emailNotFoundOrAlreadyVerified');
}

return $this->render('@NakaCMS/registration/resend_verify_email.html.twig', [
Expand Down
14 changes: 14 additions & 0 deletions src/Entity/BaseUser.php
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,9 @@ class BaseUser implements UserInterface, PasswordAuthenticatedUserInterface
#[ORM\Column]
protected ?bool $isVerified = false;

#[ORM\Column(type: 'datetime', nullable: true)]
protected ?\DateTimeInterface $lastVerificationEmailSentAt = null;

public function getId(): ?int
{
return $this->id;
Expand Down Expand Up @@ -275,4 +278,15 @@ public function setPreferredLocale(?string $preferredLocale): static

return $this;
}

public function getLastVerificationEmailSentAt(): ?\DateTimeInterface
{
return $this->lastVerificationEmailSentAt;
}

public function setLastVerificationEmailSentAt(?\DateTimeInterface $lastVerificationEmailSentAt): self
{
$this->lastVerificationEmailSentAt = $lastVerificationEmailSentAt;
return $this;
}
}

0 comments on commit ccd6a68

Please sign in to comment.