<?php
namespace App\EventSubscriber;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\Security\Http\Event\InteractiveLoginEvent;
use App\Entity\User;
class SecuritySubscriber implements EventSubscriberInterface
{
private EntityManagerInterface $em;
public function __construct(EntityManagerInterface $em)
{
$this->em = $em;
}
/**
* Indiquer les événements à écouter et les méthodes associées.
*/
public static function getSubscribedEvents(): array
{
return [
InteractiveLoginEvent::class => 'onInteractiveLogin',
];
}
/**
* Cette méthode est appelée après l'authentification par login/password,
* mais avant l'éventuelle demande de code 2FA.
*/
public function onInteractiveLogin(InteractiveLoginEvent $event): void
{
$user = $event->getAuthenticationToken()->getUser();
// Vérifier qu'il s'agit d'un utilisateur de l'appli
if (!$user instanceof User) {
return;
}
if ($user->getIsActiveTwoFA() !== true) {
$user->setIsActiveTwoFA(true);
$this->em->persist($user);
$this->em->flush();
}
}
}