vendor/symfony/security-http/EventListener/CheckRememberMeConditionsListener.php line 41

Open in your IDE?
  1. <?php
  2. /*
  3.  * This file is part of the Symfony package.
  4.  *
  5.  * (c) Fabien Potencier <fabien@symfony.com>
  6.  *
  7.  * For the full copyright and license information, please view the LICENSE
  8.  * file that was distributed with this source code.
  9.  */
  10. namespace Symfony\Component\Security\Http\EventListener;
  11. use Psr\Log\LoggerInterface;
  12. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  13. use Symfony\Component\Security\Http\Authenticator\Passport\Badge\RememberMeBadge;
  14. use Symfony\Component\Security\Http\Event\LoginSuccessEvent;
  15. use Symfony\Component\Security\Http\ParameterBagUtils;
  16. /**
  17.  * Checks if all conditions are met for remember me.
  18.  *
  19.  * The conditions that must be met for this listener to enable remember me:
  20.  *  A) This badge is present in the Passport
  21.  *  B) The remember_me key under your firewall is configured
  22.  *  C) The "remember me" functionality is activated. This is usually
  23.  *      done by having a _remember_me checkbox in your form, but
  24.  *      can be configured by the "always_remember_me" and "remember_me_parameter"
  25.  *      parameters under the "remember_me" firewall key (or "always_remember_me"
  26.  *      is enabled)
  27.  *
  28.  * @author Wouter de Jong <wouter@wouterj.nl>
  29.  *
  30.  * @final
  31.  */
  32. class CheckRememberMeConditionsListener implements EventSubscriberInterface
  33. {
  34.     private array $options;
  35.     private ?LoggerInterface $logger;
  36.     public function __construct(array $options = [], LoggerInterface $logger null)
  37.     {
  38.         $this->options $options + ['always_remember_me' => false'remember_me_parameter' => '_remember_me'];
  39.         $this->logger $logger;
  40.     }
  41.     public function onSuccessfulLogin(LoginSuccessEvent $event): void
  42.     {
  43.         $passport $event->getPassport();
  44.         if (!$passport->hasBadge(RememberMeBadge::class)) {
  45.             return;
  46.         }
  47.         /** @var RememberMeBadge $badge */
  48.         $badge $passport->getBadge(RememberMeBadge::class);
  49.         if (!$this->options['always_remember_me']) {
  50.             $parameter ParameterBagUtils::getRequestParameterValue($event->getRequest(), $this->options['remember_me_parameter']);
  51.             if (!('true' === $parameter || 'on' === $parameter || '1' === $parameter || 'yes' === $parameter || true === $parameter)) {
  52.                 $this->logger?->debug('Remember me disabled; request does not contain remember me parameter ("{parameter}").', ['parameter' => $this->options['remember_me_parameter']]);
  53.                 return;
  54.             }
  55.         }
  56.         $badge->enable();
  57.     }
  58.     public static function getSubscribedEvents(): array
  59.     {
  60.         return [LoginSuccessEvent::class => ['onSuccessfulLogin', -32]];
  61.     }
  62. }