Bonjour,
Je suis entrain d'inscrire mes utilisateurs (confimation de compte avec email)et les authetifiés sans utilisé FOSUserBundle

je suis inspiré par ce vidéo(recommandé par un membre de ce groupe) : https://www.grafikart.fr/tutoriels/confirmation-compte-824

qu'est ce que j'ai fais:

1-enregistrement des utilisateur

2-l'email est envoyé à l'utilisateur pour activation

3-si l'utilisateur clique sur le lien activate les champs : confirmation_token=null and enabled =true seront mis à jour

Mais

Je ne sais pas comment tester dans la fonction login pour ajouter la condition confirmationToken = null et enabled =true , pour que les compte activés ont le droit de se connecter

security.yml

encoders:
        AppBundle\Entity\User: bcrypt

    providers:
        db_provider:
            entity:
                class: AppBundle\Entity\User
                property: username

    firewalls:
        # disables authentication for assets and the profiler, adapt it according to your needs
        dev:
            pattern: ^/(_(profiler|wdt)|css|images|js)/
            security: false

        main:
            anonymous: ~
            provider: db_provider
            form_login:
                login_path: login
                check_path: login
            logout:
                path:   /logout
                target: /

    access_control:
        - { path: ^/login, roles: IS_AUTHENTICATED_ANONYMOUSLY }
        - { path: ^/register, roles: IS_AUTHENTICATED_ANONYMOUSLY }

registrationController:

/**
 * @Route("/register")
 * @param Request $request
 * @Template()
 * @return \Symfony\Component\HttpFoundation\Response
 */
 public function registerAction(Request $request)
 {
    $user = new User();
    $form = $this->createForm(UserType::class, $user);
    $form->handleRequest($request);
    $em = $this->getDoctrine()->getManager();
    if ($form->isSubmitted() && $form->isValid()) {
        $password = $this->get('security.password_encoder')
            ->encodePassword($user, $user->getPlainPassword());
        $user->setPassword($password);

        $em->persist($user);
        $em->flush();

        $confirmationToken = $user->getConfirmationToken();
        $username = $user->getUsername();
        $userId = $user->getId();

        $subject = 'Account activation';
        $email = $user->getEmail();
      /*  $renderedTemplate = $this->render('AppBundle:Register:registrationConfirmed.html.twig', array(
            'username' => $username,
            'confirmationToken' => $confirmationToken
        ));*/
        $message = (new \Swift_Message('Hello Email'))
            ->setSubject($subject)
            ->setFrom($this->container->getParameter('mailer_user'))
            ->setTo($email)
            ->setBody(
            $this->renderView(
                'AppBundle:Register:registrationConfirmed.html.twig', array('id' => $userId,'username' => $username,'confirmationToken' => $confirmationToken)), 'text/html');

        $this->get('mailer')->send($message);

        $this->addFlash('success', 'Genus created!');
       return $this->redirectToRoute('login');
    }

    return $this->render('AppBundle:Register:register.html.twig', array('form' => $form->createView()));
}

 /**
  * @Route("/confirm/{id}/{confirmationToken}", name="confirmation_path")
  */
public function confirmAction(Request $request, $id,$confirmationToken)
 {
    $em = $this->getDoctrine()->getManager();
    $repository = $em->getRepository('AppBundle:User');
    //$confirmationToken = $user->getConfirmationToken();

    $user = $repository->findUserByIdAndConfirmationToken($id,$confirmationToken);

    if (!$user)
    {
        throw $this->createNotFoundException('We couldn\'t find an account for that confirmation token');
    }
      else
      {

     $user= $repository->updateConfirmationTokenAfterValidation($id,$confirmationToken);

    // $user->setEnabled(true);
    // $user->setConfirmationToken(null);
    //$em->persist($user);
    // $em->flush();
      }
    return $this->redirectToRoute('login');
}

ce lien se trouuve dans l'email envoyé pour activer le compte:

<a href="{{ url('confirmation_path', {'id': id, 'confirmationToken': confirmationToken }  ) }}">Activate</a>

pour la connexion c'est loginAction qui fait le travail, donc Comment tester confirmToken=null pour que juste les compte activé ont le droit se connecter

/**
 * @Route("/login",name="login")
 */

 public function loginAction()
    {
        $helper = $this->get('security.authentication_utils');

        return $this->render('AppBundle:Login:login.html.twig', [
            // last username entered by the user (if any)
            'last_username' => $helper->getLastUsername(),
            // last authentication error (if any)
            'error' => $helper->getLastAuthenticationError(),
        ]);
    }

my login.html.twig

<form action="{{ path('login') }}" method="post">

            <div class="form-group">
                <label for="username">{{ 'label.username'|trans }}</label>
                <input type="text" id="username" name="_username"  class="form-control"/>
            </div>
            <div class="form-group">
                <label for="password">{{ 'label.password'|trans }}</label>
                <input type="password" id="password" name="_password" class="form-control" />
            </div>
            <button type="submit" class="btn btn-primary">
                <i class="fa fa-sign-in" aria-hidden="true"></i> {{ 'action.sign_in'|trans }}
            </button>
        </form>

Aucune réponse