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

3 réponses


Bonjour,

Est-ce que l'adresse mail de l'utilisateur se trouve bien en base ?

Je ne vois pas ce qui redirige l'utilisateur vers la page "login", est-ce que c'est bien la bonne version du code qui est postée ?

tu as bien mis la page de verification de mail en public_access dans le security.yaml ?

il faut peut etre verifier ton code au niveau de la fonction login et le role sur la page de redirection