РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
612 of 1361 menu

Класс RememberMeBadge

Класс RememberMeBadge добавляется в объект Passport во время аутентификации. Он сообщает системе безопасности Symfony, что для текущего пользователя нужно создать cookie "запомнить меня". Это позволяет пользователю оставаться в системе после закрытия браузера. Класс не принимает обязательных параметров в конструкторе.

Синтаксис

use Symfony\Component\Security\Http\Authenticator\Passport\Badge\RememberMeBadge; $badge = new RememberMeBadge();

Пример

Давайте создадим кастомный аутентификатор, который при успешном входе будет активировать функцию "запомнить меня". Для этого добавим бейдж в объект Passport:

<?php namespace App\Security; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\Security\Core\Authentication\Token\TokenInterface; use Symfony\Component\Security\Core\Exception\AuthenticationException; use Symfony\Component\Security\Http\Authenticator\AbstractAuthenticator; use Symfony\Component\Security\Http\Authenticator\Passport\Passport; use Symfony\Component\Security\Http\Authenticator\Passport\SelfValidatingPassport; use Symfony\Component\Security\Http\Authenticator\Passport\Badge\UserBadge; use Symfony\Component\Security\Http\Authenticator\Passport\Badge\RememberMeBadge; class CustomAuthenticator extends AbstractAuthenticator { public function supports(Request $request): ?bool { return $request->headers->has('X-AUTH-TOKEN'); } public function authenticate(Request $request): Passport { $apiToken = $request->headers->get('X-AUTH-TOKEN'); if (null === $apiToken) { throw new AuthenticationException('No API token provided'); } return new SelfValidatingPassport( new UserBadge($apiToken), [ new RememberMeBadge(), ] ); } public function onAuthenticationSuccess(Request $request, TokenInterface $token, string $firewallName): ?Response { return null; } public function onAuthenticationFailure(Request $request, AuthenticationException $exception): ?Response { return new Response('Authentication failed', Response::HTTP_UNAUTHORIZED); } } ?>

После успешной аутентификации с этим бейджем Symfony автоматически создаст cookie REMEMBERME. Результат выполнения кода в браузере - установка cookie:

REMEMBERME=deleted; expires=Thu, 01-Jan-1970 00:00:01 GMT

Пример

Давайте проверим, что бейдж действительно добавлен в паспорт, используя метод hasBadge:

<?php namespace App\Controller; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\Routing\Attribute\Route; use Symfony\Component\Security\Http\Authenticator\Passport\Passport; use Symfony\Component\Security\Http\Authenticator\Passport\Badge\UserBadge; use Symfony\Component\Security\Http\Authenticator\Passport\Badge\RememberMeBadge; class AuthController extends AbstractController { #[Route('/check-badge', name: 'check_badge')] public function check(): Response { $passport = new Passport( new UserBadge('user'), [ new RememberMeBadge(), ] ); $res = $passport->hasBadge(RememberMeBadge::class); return new Response(var_export($res, true)); } } ?>

Результат выполнения кода:

true

Смотрите также

  • класс Passport,
    который представляет собой паспорт аутентификации
  • метод addBadge,
    который добавляет бейдж в паспорт
  • класс UserBadge,
    который идентифицирует пользователя
  • класс CsrfTokenBadge,
    который добавляет CSRF-защиту
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить