/
githubmirror
/
symfony
Обзор
Документация
Войти
/
githubmirror
/
symfony
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
8.2
src/Symfony/Component/Security/Http/RememberMe/SignatureRememberMeHandler.php
79 строк
3 KB
Christian Flothmann
remove the user FQCN from remember me cookies
19 сен 2025, 10:04
19 сен 2025, 10:04
56b95da
Код
Авторство
О чём код?
<?php /* * This file is part of the Symfony package. * * (c) Fabien Potencier <fabien@symfony.com> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Symfony\Component\Security\Http\RememberMe; use Psr\Log\LoggerInterface; use Symfony\Component\HttpFoundation\RequestStack; use Symfony\Component\Security\Core\Exception\AuthenticationException; use Symfony\Component\Security\Core\Signature\Exception\ExpiredSignatureException; use Symfony\Component\Security\Core\Signature\Exception\InvalidSignatureException; use Symfony\Component\Security\Core\Signature\SignatureHasher; use Symfony\Component\Security\Core\User\UserInterface; use Symfony\Component\Security\Core\User\UserProviderInterface; /** * Implements safe remember-me cookies using the {@see SignatureHasher}. * * This handler doesn't require a database for the remember-me tokens. * However, it cannot invalidate a specific user session, all sessions for * that user will be invalidated instead. Use {@see PersistentRememberMeHandler} * if you need this. * * @author Wouter de Jong <wouter@wouterj.nl> */ final class SignatureRememberMeHandler extends AbstractRememberMeHandler { public function __construct( private SignatureHasher $signatureHasher, UserProviderInterface $userProvider, RequestStack $requestStack, array $options, ?LoggerInterface $logger = null, ) { parent::__construct($userProvider, $requestStack, $options, $logger); } public function createRememberMeCookie(UserInterface $user): void { $expires = time() + $this->options['lifetime']; $value = $this->signatureHasher->computeSignatureHash($user, $expires); $details = new RememberMeDetails($user->getUserIdentifier(), $expires, $value); $this->createCookie($details); } public function consumeRememberMeCookie(RememberMeDetails $rememberMeDetails): UserInterface { try { $this->signatureHasher->acceptSignatureHash($rememberMeDetails->getUserIdentifier(), $rememberMeDetails->getExpires(), $rememberMeDetails->getValue()); } catch (InvalidSignatureException $e) { throw new AuthenticationException('The cookie\'s hash is invalid.', 0, $e); } catch (ExpiredSignatureException $e) { throw new AuthenticationException('The cookie has expired.', 0, $e); } return parent::consumeRememberMeCookie($rememberMeDetails); } public function processRememberMe(RememberMeDetails $rememberMeDetails, UserInterface $user): void { try { $this->signatureHasher->verifySignatureHash($user, $rememberMeDetails->getExpires(), $rememberMeDetails->getValue()); } catch (InvalidSignatureException $e) { throw new AuthenticationException('The cookie\'s hash is invalid.', 0, $e); } catch (ExpiredSignatureException $e) { throw new AuthenticationException('The cookie has expired.', 0, $e); } $this->createRememberMeCookie($user); } }