<?php
namespace App\EventSubscriber;
use App\Entity\Users;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\Security\Http\Event\LoginSuccessEvent;
/**
* Horodate la dernière connexion réussie.
*
* On écoute `LoginSuccessEvent` plutôt que d'écrire dans
* `UsersAuthenticator::onAuthenticationSuccess()` : l'événement couvre tous les
* authenticators, y compris ceux qui seraient ajoutés plus tard, et la reconnexion
* automatique par cookie « remember me » si elle est activée un jour.
*/
class LoginSubscriber implements EventSubscriberInterface
{
public function __construct(private EntityManagerInterface $em) {}
public static function getSubscribedEvents(): array
{
return [LoginSuccessEvent::class => 'onLoginSuccess'];
}
public function onLoginSuccess(LoginSuccessEvent $event): void
{
$user = $event->getUser();
if (!$user instanceof Users) {
return;
}
$user->registerLogin();
$this->em->flush();
}
}