src\EventSubscriber\SecuritySubscriber.php line 33

Open in your IDE?
  1. <?php
  2. namespace App\EventSubscriber;
  3. use Doctrine\ORM\EntityManagerInterface;
  4. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  5. use Symfony\Component\Security\Http\Event\InteractiveLoginEvent;
  6. use App\Entity\User;
  7. class SecuritySubscriber implements EventSubscriberInterface
  8. {
  9.     private EntityManagerInterface $em;
  10.     public function __construct(EntityManagerInterface $em)
  11.     {
  12.         $this->em $em;
  13.     }
  14.     /**
  15.      * Indiquer les événements à écouter et les méthodes associées.
  16.      */
  17.     public static function getSubscribedEvents(): array
  18.     {
  19.         return [
  20.             InteractiveLoginEvent::class => 'onInteractiveLogin',
  21.         ];
  22.     }
  23.     /**
  24.      * Cette méthode est appelée après l'authentification par login/password,
  25.      * mais avant l'éventuelle demande de code 2FA.
  26.      */
  27.     public function onInteractiveLogin(InteractiveLoginEvent $event): void
  28.     {
  29.         $user $event->getAuthenticationToken()->getUser();
  30.         // Vérifier qu'il s'agit d'un utilisateur de l'appli
  31.         if (!$user instanceof User) {
  32.             return;
  33.         }
  34.         if ($user->getIsActiveTwoFA() !== true) {
  35.             $user->setIsActiveTwoFA(true);
  36.             $this->em->persist($user);
  37.             $this->em->flush();
  38.         }
  39.     }
  40. }