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

Класс AbstractLoginFormAuthenticator

Класс AbstractLoginFormAuthenticator является базовым классом для создания аутентификатора, который обрабатывает вход пользователя через обычную HTML-форму. Он расширяет класс AbstractAuthenticator и предоставляет готовую реализацию метода supports, который определяет, должен ли аутентификатор обрабатывать текущий запрос. Наследнику достаточно реализовать метод authenticate для проверки учётных данных и метод getLoginUrl для перенаправления неаутентифицированных пользователей на страницу входа.

Синтаксис

abstract class AbstractLoginFormAuthenticator extends AbstractAuthenticator { abstract protected function getLoginUrl(): string; public function supports(Request $request): ?bool; abstract public function authenticate(Request $request): Passport; }

Пример

Давайте создадим простой аутентификатор, который принимает логин и пароль из POST-запроса и возвращает паспорт с UserBadge и PasswordCredentials:

<?php namespace AppSecurity; use AppRepositoryUserRepository; use SymfonyComponentHttpFoundationRequest; use SymfonyComponentHttpFoundationResponse; use SymfonyComponentRoutingGeneratorUrlGeneratorInterface; use SymfonyComponentSecurityHttpAuthenticatorAbstractLoginFormAuthenticator; use SymfonyComponentSecurityHttpAuthenticatorPassportBadgeUserBadge; use SymfonyComponentSecurityHttpAuthenticatorPassportCredentialsPasswordCredentials; use SymfonyComponentSecurityHttpAuthenticatorPassportPassport; use SymfonyComponentSecurityHttpAuthenticatorTokenTokenInterface; use SymfonyComponentSecurityHttpSecurity; class LoginFormAuthenticator extends AbstractLoginFormAuthenticator { public function __construct( private UserRepository $userRepository, private UrlGeneratorInterface $urlGenerator ) { } protected function getLoginUrl(): string { return $this->urlGenerator->generate('app_login'); } public function authenticate(Request $request): Passport { $username = $request->request->get('username', ''); $password = $request->request->get('password', ''); return new Passport( new UserBadge($username, fn (string $userIdentifier) => $this->userRepository->findOneBy(['username' => $userIdentifier])), new PasswordCredentials($password) ); } public function onAuthenticationSuccess(Request $request, TokenInterface $token, string $firewallName): ?Response { return new Response('"hello"'); } } ?>

В этом примере метод authenticate извлекает поля username и password из POST-запроса, создаёт объект UserBadge с загрузчиком пользователя и объект PasswordCredentials с паролем. Метод getLoginUrl возвращает адрес страницы входа.

Пример

Давайте зарегистрируем аутентификатор в конфигурации безопасности:

security: firewalls: main: lazy: true provider: app_user_provider custom_authenticator: authenticators: - AppSecurityLoginFormAuthenticator logout: path: app_logout

После регистрации Symfony автоматически вызовет метод supports, унаследованный от AbstractLoginFormAuthenticator. Этот метод проверяет, что текущий запрос является POST-запросом на адрес, возвращаемый методом getLoginUrl.

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

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