src/Bundles/UserBundle/EventListener/SecurityEventsListener.php line 25

Open in your IDE?
  1. <?php
  2. declare(strict_types=1);
  3. namespace App\Bundles\UserBundle\EventListener;
  4. use App\Bundles\UserBundle\Entity\UserInterface;
  5. use App\Bundles\UserBundle\Service\Session\SessionGeneratedIdentifierSaver;
  6. use App\Bundles\UserBundle\Service\User\UserService;
  7. use Scheb\TwoFactorBundle\Security\Http\Authenticator\TwoFactorAuthenticator;
  8. use Symfony\Component\EventDispatcher\Attribute\AsEventListener;
  9. use Symfony\Component\Security\Http\Event\LoginSuccessEvent;
  10. #[AsEventListener(eventLoginSuccessEvent::class, method'onSuccessLogin')]
  11. class SecurityEventsListener
  12. {
  13.     public const GENERATED_SESSION_ID 'generated_session_id';
  14.     public function __construct(
  15.         private readonly UserService $userService,
  16.         private readonly SessionGeneratedIdentifierSaver $sessionGeneratedIdentifierSaver,
  17.     ) {
  18.     }
  19.     public function onSuccessLogin(LoginSuccessEvent $event): void
  20.     {
  21.         $token $event->getAuthenticatedToken();
  22.         if (
  23.             !$token->hasAttribute(TwoFactorAuthenticator::FLAG_2FA_COMPLETE) ||
  24.             $token->getAttribute(TwoFactorAuthenticator::FLAG_2FA_COMPLETE) === false
  25.         ) {
  26.             return;
  27.         }
  28.         /** @var UserInterface $user */
  29.         $user $event->getUser();
  30.         $this->userService->updateLastLoginAt($user);
  31.         $this->sessionGeneratedIdentifierSaver->save();
  32.     }
  33. }