<?php
namespace App\Security\EventSubscriber;
use App\Entity\Utilisateur\Utilisateur;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\Security\Http\Event\InteractiveLoginEvent;
class LimitLoginToOneSessionByUserSubscriber implements EventSubscriberInterface
{
private EntityManagerInterface $entityManager;
public function __construct(EntityManagerInterface $entityManager)
{
$this->entityManager = $entityManager;
}
public function onSecurityInteractiveLogin(InteractiveLoginEvent $event): void
{
/** @var Utilisateur $user */
$user = $event->getAuthenticationToken()->getUser();
$session = $event->getRequest()->getSession();
$user->setLastLogin(new \DateTime());
$user->setSessionId($session->getId());
$this->entityManager->flush();
}
public static function getSubscribedEvents(): array
{
return [
'security.interactive_login' => 'onSecurityInteractiveLogin',
];
}
}