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

Класс SelfValidatingPassport

Класс SelfValidatingPassport наследуется от класса Passport и создаёт паспорт аутентификации, который сразу считается валидным. Обычный паспорт требует наличия бейджей проверки подлинности, например PasswordCredentials или CsrfTokenBadge. Класс SelfValidatingPassport снимает это требование: аутентификатор сам подтверждает личность пользователя, поэтому дополнительные бейджи проверки не нужны. Первым параметром передаётся бейдж пользователя UserBadge, вторым - массив дополнительных бейджей.

Синтаксис

new SelfValidatingPassport(UserBadge $userBadge, array $badges = [])

Пример

Давайте создадим паспорт с самостоятельной проверкой для уже загруженного пользователя:

<?php namespace App\Security; use App\Entity\User; 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\Badge\UserBadge; use Symfony\Component\Security\Http\Authenticator\Passport\SelfValidatingPassport; class ApiAuthenticator extends AbstractAuthenticator { public function supports(Request $request): ?bool { return $request->headers->has('X-AUTH-TOKEN'); } public function authenticate(Request $request): SelfValidatingPassport { $token = $request->headers->get('X-AUTH-TOKEN'); $userBadge = new UserBadge($token, function (string $token): User { return new User('abcde'); }); return new SelfValidatingPassport($userBadge); } public function onAuthenticationSuccess(Request $request, TokenInterface $token, string $firewallName): ?Response { return null; } public function onAuthenticationFailure(Request $request, AuthenticationException $exception): ?Response { return new Response('auth failed', Response::HTTP_UNAUTHORIZED); } } ?>

Результат выполнения кода при наличии заголовка X-AUTH-TOKEN:

"auth success"

Пример

Давайте добавим к паспорту бейдж RememberMeBadge для поддержки функции «запомнить меня»:

<?php namespace App\Security; use App\Entity\User; 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\Badge\RememberMeBadge; use Symfony\Component\Security\Http\Authenticator\Passport\Badge\UserBadge; use Symfony\Component\Security\Http\Authenticator\Passport\SelfValidatingPassport; class ApiAuthenticator extends AbstractAuthenticator { public function supports(Request $request): ?bool { return $request->headers->has('X-AUTH-TOKEN'); } public function authenticate(Request $request): SelfValidatingPassport { $token = $request->headers->get('X-AUTH-TOKEN'); $userBadge = new UserBadge($token, function (string $token): User { return new User('abcde'); }); $rememberMeBadge = new RememberMeBadge(); return new SelfValidatingPassport($userBadge, [$rememberMeBadge]); } public function onAuthenticationSuccess(Request $request, TokenInterface $token, string $firewallName): ?Response { return new Response('auth success'); } public function onAuthenticationFailure(Request $request, AuthenticationException $exception): ?Response { return new Response('auth failed', Response::HTTP_UNAUTHORIZED); } } ?>

Результат выполнения кода при наличии заголовка X-AUTH-TOKEN:

"auth success"

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

  • класс Passport,
    который является базовым классом паспорта аутентификации
  • класс UserBadge,
    который передаёт пользователя в паспорт
  • класс RememberMeBadge,
    который включает функцию «запомнить меня»
  • метод addBadge,
    который добавляет бейдж в паспорт
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить