vendor/scheb/2fa-bundle/Security/Http/EventListener/SuppressRememberMeListener.php line 17

Open in your IDE?
  1. <?php
  2. declare(strict_types=1);
  3. namespace Scheb\TwoFactorBundle\Security\Http\EventListener;
  4. use Scheb\TwoFactorBundle\Security\Authentication\Token\TwoFactorTokenInterface;
  5. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  6. use Symfony\Component\Security\Http\Authenticator\Passport\Badge\RememberMeBadge;
  7. use Symfony\Component\Security\Http\Event\LoginSuccessEvent;
  8. class SuppressRememberMeListener implements EventSubscriberInterface
  9. {
  10.     // Just before Symfony's RememberMeListener
  11.     private const PRIORITY = -63;
  12.     public function onSuccessfulLogin(LoginSuccessEvent $event): void
  13.     {
  14.         $passport $event->getPassport();
  15.         if (!$passport->hasBadge(RememberMeBadge::class)) {
  16.             return;
  17.         }
  18.         /** @var RememberMeBadge $rememberMeBadge */
  19.         $rememberMeBadge $passport->getBadge(RememberMeBadge::class);
  20.         if (!$rememberMeBadge->isEnabled()) {
  21.             return; // User did not request a remember-me cookie
  22.         }
  23.         $token $event->getAuthenticatedToken();
  24.         if (!($token instanceof TwoFactorTokenInterface)) {
  25.             return; // We're not in a 2fa process
  26.         }
  27.         // Disable remember-me cookie
  28.         $rememberMeBadge->disable();
  29.         $token->setAttribute(TwoFactorTokenInterface::ATTRIBUTE_NAME_USE_REMEMBER_MEtrue);
  30.     }
  31.     public static function getSubscribedEvents(): array
  32.     {
  33.         return [LoginSuccessEvent::class => ['onSuccessfulLogin'self::PRIORITY]];
  34.     }
  35. }