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

Метод start класса AbstractAuthenticator

Метод start класса AbstractAuthenticator запускает процесс аутентификации. Он вызывается автоматически системой безопасности Symfony, когда нужно аутентифицировать пользователя. Метод принимает объект Request и должен вернуть объект Passport либо null. Если возвращается null, аутентификация пропускается. Возвращённый Passport передаётся в метод authenticate.

Синтаксис

public function start(Request $request): ?Passport

Пример

Давайте создадим аутентификатор, который извлекает токен из заголовка Authorization и формирует паспорт:

<?php namespace App\Security; use App\Security\UserProvider; use Symfony\Component\HttpFoundation\Request; 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; class ApiTokenAuthenticator extends AbstractAuthenticator { public function supports(Request $request): ?bool { return $request->headers->has('Authorization'); } public function start(Request $request): ?Passport { $token = $request->headers->get('Authorization'); if ($token === null) { return null; } return new SelfValidatingPassport( new UserBadge($token) ); } } ?>

Пример

Давайте вернём паспорт с пользовательскими данными из формы входа:

<?php namespace App\Security; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\Security\Http\Authenticator\AbstractAuthenticator; use Symfony\Component\Security\Http\Authenticator\Passport\Passport; use Symfony\Component\Security\Http\Authenticator\Passport\PasswordCredentials; use Symfony\Component\Security\Http\Authenticator\Passport\Badge\UserBadge; use Symfony\Component\Security\Http\Authenticator\Passport\Badge\CsrfTokenBadge; class FormAuthenticator extends AbstractAuthenticator { public function supports(Request $request): ?bool { return $request->isMethod('POST') && $request->attributes->get('_route') === 'app_login'; } public function start(Request $request): ?Passport { $email = $request->request->get('email'); $password = $request->request->get('password'); $csrfToken = $request->request->get('_csrf_token'); return new Passport( new UserBadge($email), new PasswordCredentials($password), [ new CsrfTokenBadge('authenticate', $csrfToken), ] ); } } ?>

Пример

Давайте посмотрим, как система безопасности вызывает метод start и что возвращается в результате:

<?php namespace App\Controller; use App\Security\ApiTokenAuthenticator; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; class SecurityController extends AbstractController { public function check(ApiTokenAuthenticator $authenticator, Request $request): Response { $passport = $authenticator->start($request); if ($passport === null) { return new Response('no passport'); } return new Response('passport created'); } } ?>

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

"passport created"

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

  • класс AbstractAuthenticator,
    который является базой для аутентификаторов
  • метод authenticate,
    который получает паспорт и возвращает пользователя
  • класс Passport,
    который хранит данные аутентификации
  • класс SelfValidatingPassport,
    который создаёт паспорт без пароля
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить