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

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. use function assert;
  9. class SuppressRememberMeListener implements EventSubscriberInterface
  10. {
  11.     // Just before Symfony's RememberMeListener
  12.     private const PRIORITY = -63;
  13.     public function onSuccessfulLogin(LoginSuccessEvent $event): void
  14.     {
  15.         $passport $event->getPassport();
  16.         if (!$passport->hasBadge(RememberMeBadge::class)) {
  17.             return;
  18.         }
  19.         $rememberMeBadge $passport->getBadge(RememberMeBadge::class);
  20.         assert($rememberMeBadge instanceof RememberMeBadge);
  21.         if (!$rememberMeBadge->isEnabled()) {
  22.             return; // User did not request a remember-me cookie
  23.         }
  24.         $token $event->getAuthenticatedToken();
  25.         if (!($token instanceof TwoFactorTokenInterface)) {
  26.             return; // We're not in a 2fa process
  27.         }
  28.         // Disable remember-me cookie
  29.         $rememberMeBadge->disable();
  30.         $token->setAttribute(TwoFactorTokenInterface::ATTRIBUTE_NAME_USE_REMEMBER_MEtrue);
  31.     }
  32.     /**
  33.      * {@inheritdoc}
  34.      */
  35.     public static function getSubscribedEvents(): array
  36.     {
  37.         return [LoginSuccessEvent::class => ['onSuccessfulLogin'self::PRIORITY]];
  38.     }
  39. }