src/EventSubscriber/UserLoginSubscriber.php line 30

Open in your IDE?
  1. <?php
  2. namespace App\EventSubscriber;
  3. use App\Entity\LogHistory;
  4. use App\Entity\User;
  5. use App\Repository\LogHistoryCategoryRepository;
  6. use DateTimeImmutable;
  7. use Doctrine\ORM\EntityManagerInterface;
  8. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  9. use Symfony\Component\Security\Http\Event\InteractiveLoginEvent;
  10. class UserLoginSubscriber implements EventSubscriberInterface
  11. {
  12.     public function __construct(
  13.         private readonly EntityManagerInterface       $entityManager,
  14.         private readonly LogHistoryCategoryRepository $logHistoryCategoryRepository,
  15.     )
  16.     {
  17.     }
  18.     public static function getSubscribedEvents()
  19.     {
  20.         return [
  21.             'security.interactive_login' => 'onUserLogin',
  22.         ];
  23.     }
  24.     public function onUserLogin(InteractiveLoginEvent $event)
  25.     {
  26.         /** @var User $user */
  27.         $user $event->getAuthenticationToken()->getUser();
  28.         $now = new DateTimeImmutable();
  29.         $user->setLastConnexionDate($now);
  30.         // on persiste
  31.         $this->entityManager->persist($user);
  32.         // Get logHistory Category from database
  33.         $logHistoryCategory $this->logHistoryCategoryRepository->findOneBy(['slug' => 'security']);
  34.         // On enregistre la date de chaque connexion de l'utilisateur
  35.         $logHistory = new LogHistory();
  36.         $logHistory->setUser($user);
  37.         $logHistory->setDate($now);
  38.         $logHistory->setStatus('success');
  39.         $logHistory->setMessage('Connexion rĂ©ussie');
  40.         $logHistory->setCategory($logHistoryCategory);
  41.         $this->entityManager->persist($logHistory);
  42.         $this->entityManager->flush();
  43.     }
  44. }