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

Метод authenticate класса AbstractLoginFormAuthenticator

Метод authenticate класса AbstractLoginFormAuthenticator вызывается системой безопасности Symfony при попытке входа через форму. Он принимает объект Request с данными POST-запроса и должен вернуть объект паспорта Passport. Чаще всего возвращается Passport или SelfValidatingPassport с бейджами UserBadge и PasswordCredentials. Метод объявлен абстрактным и требует реализации в дочернем классе.

Синтаксис

abstract public function authenticate(Request $request): Passport;

Пример

Давайте создадим аутентификатор формы входа и реализуем метод authenticate. Он извлечёт email и пароль из запроса и вернёт паспорт с бейджами:

<?php namespace App\Security; use App\Repository\UserRepository; use Symfony\Component\HttpFoundation\RedirectResponse; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\Routing\Generator\UrlGeneratorInterface; use Symfony\Component\Security\Core\Authentication\Token\TokenInterface; use Symfony\Component\Security\Core\Exception\AuthenticationException; use Symfony\Component\Security\Http\Authenticator\AbstractLoginFormAuthenticator; use Symfony\Component\Security\Http\Authenticator\Passport\Badge\CsrfTokenBadge; use Symfony\Component\Security\Http\Authenticator\Passport\Badge\UserBadge; use Symfony\Component\Security\Http\Authenticator\Passport\Credentials\PasswordCredentials; use Symfony\Component\Security\Http\Authenticator\Passport\Passport; class LoginFormAuthenticator extends AbstractLoginFormAuthenticator { public function __construct( private UserRepository $userRepository, private UrlGeneratorInterface $urlGenerator, ) { } protected function getLoginUrl(Request $request): string { return $this->urlGenerator->generate('app_login'); } public function authenticate(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), ] ); } public function onAuthenticationSuccess(Request $request, TokenInterface $token, string $firewallName): ?RedirectResponse { return new RedirectResponse($this->urlGenerator->generate('app_home')); } public function onAuthenticationFailure(Request $request, AuthenticationException $exception): ?RedirectResponse { return new RedirectResponse($this->urlGenerator->generate('app_login')); } } ?>

Результат выполнения метода authenticate для запроса с email 'user' и паролем 'abcde':

Passport { user: UserBadge('user'), credentials: PasswordCredentials('abcde') }

Пример

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

<?php namespace App\Security; use App\Repository\UserRepository; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\Security\Http\Authenticator\AbstractLoginFormAuthenticator; use Symfony\Component\Security\Http\Authenticator\Passport\Badge\PasswordUpgradeBadge; 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\Credentials\PasswordCredentials; use Symfony\Component\Security\Http\Authenticator\Passport\Passport; class LoginFormAuthenticator extends AbstractLoginFormAuthenticator { public function __construct( private UserRepository $userRepository, ) { } protected function getLoginUrl(Request $request): string { return '/login'; } public function authenticate(Request $request): Passport { $email = $request->request->get('email', ''); $password = $request->request->get('password', ''); return new Passport( new UserBadge($email), new PasswordCredentials($password), [ new RememberMeBadge(), new PasswordUpgradeBadge($password), ] ); } } ?>

Результат выполнения метода authenticate для запроса с email 'article' и паролем 'hello':

Passport { user: UserBadge('article'), credentials: PasswordCredentials('hello'), badges: [RememberMeBadge, PasswordUpgradeBadge] }

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

  • класс AbstractLoginFormAuthenticator,
    который является базой для аутентификатора формы входа
  • метод getLoginUrl,
    который возвращает адрес страницы входа
  • метод supports,
    который определяет, поддерживает ли аутентификатор запрос
  • класс SelfValidatingPassport,
    который представляет паспорт с самостоятельной проверкой
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить