Bonjour.
Je sus la formation Symfony 7 (sans trop de problémes jusque ici) mais la, je trouvea pas le pouquoi du comment.
PHP : 8.2.13
Composer 2.7.1
Windows 11 64 (on sais jamais ^^)
Lorsque l'utilisateur, veux s'enregistrer, il reçoit bien de mail de confirmation d'adresse mail, quand il clique dessus, il est bien redirigé ver la page '/login' mais l'adresse mail de l'utilisateur n'a pas été vérifié.
Il ne peut donc pas se connecter.
L'utilisateur est bien dans la DB.
Je n'ai aucun message d'erreur.
Le liens de validation reçu par l'utilisateur est sous la forme :
http://localhost:8000/verify/email?expires=1711156044&signature=nn5%2BIfAw8bzly1yrXpSDDC92QZY61n0n8gGojDFgXJQ%3D&token=Sgpw23MGVEqVclZxG%2FV2OX%2FOrWq6jo20m95eRtu%2BeAU%3D
Je vous donne le code de mon controleur RegistrationController
Je suppose au le probléme vient de la methode verifyUserEmail
<?php
namespace App\Controller;
use App\Entity\User;
use App\Form\RegistrationFormType;
use App\Security\AppAuthenticator;
use App\Security\EmailVerifier;
use Doctrine\ORM\EntityManagerInterface;
use Psr\Log\LoggerInterface;
use Symfony\Bridge\Twig\Mime\TemplatedEmail;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Bundle\SecurityBundle\Security;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Mime\Address;
use Symfony\Component\PasswordHasher\Hasher\UserPasswordHasherInterface;
use Symfony\Component\Routing\Attribute\Route;
use Symfony\Component\Security\Http\Authentication\UserAuthenticatorInterface;
use Symfony\Contracts\Translation\TranslatorInterface;
use SymfonyCasts\Bundle\VerifyEmail\Exception\VerifyEmailExceptionInterface;
class RegistrationController extends AbstractController
{
private EmailVerifier $emailVerifier;
public function __construct(EmailVerifier $emailVerifier, LoggerInterface $logger)
{
$this->emailVerifier = $emailVerifier;
$this->logger =$logger;
}
#[Route('/register', name: 'app_register')]
public function register(Request $request, UserPasswordHasherInterface $userPasswordHasher, UserAuthenticatorInterface $userAuthenticator, AppAuthenticator $authenticator, EntityManagerInterface $entityManager): Response
{
$user = new User();
$form = $this->createForm(RegistrationFormType::class, $user);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$user->setPassword(
$userPasswordHasher->hashPassword(
$user,
$form->get('plainPassword')->getData()
)
);
$entityManager->persist($user);
$entityManager->flush();
$this->emailVerifier->sendEmailConfirmation('app_verify_email', $user,
(new TemplatedEmail())
->from(new Address('flow@flow.fr', 'Flow'))
->to($user->getEmail())
->subject('Confirmez votre e-mail')
->htmlTemplate('registration/confirmation_email.html.twig')
);;
return $this->redirectToRoute('home.index');
}
return $this->render('registration/register.html.twig',[
'registrationForm' => $form->createView()
]);
}
#[Route('/verify/email', name: 'app_verify_email')]
public function verifyUserEmail(Request $request, TranslatorInterface $translator, EntityManagerInterface $entityManager): Response
{
$this->denyAccessUnlessGranted('IS_AUTHENTICATED_FULLY');
try {
$this->emailVerifier->handleEmailConfirmation($request, $this->getUser());
}catch (VerifyEmailExceptionInterface $exception){
$this->addFlash('verify_email_error', $translator->trans($exception->getReason(), [], 'VerifyEmailBundle'));
return $this->redirectToRoute('app_register');
}
$this->addFlash('success', 'Your email has been verified.');
return $this->redirectToRoute('app_register');
}
}
Merci d'avance pour votre aide