Класс 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-защиту