Метод getLoginUrl
Метод getLoginUrl принадлежит абстрактному классу
AbstractLoginFormAuthenticator и возвращает адрес
страницы с формой входа. Этот адрес используется аутентификатором,
когда нужно перенаправить неавторизованного пользователя на форму
логина. Метод не принимает параметров и должен вернуть строку
с URL. Обычно его реализуют через метод generateUrl
контроллера или через генератор маршрутов.
Синтаксис
protected function getLoginUrl(): string
Пример
Давайте создадим аутентификатор формы входа и вернём в методе
getLoginUrl адрес маршрута app_login:
<?php
namespace AppSecurity;
use SymfonyComponentHttpFoundationRedirectResponse;
use SymfonyComponentHttpFoundationRequest;
use SymfonyComponentRoutingGeneratorUrlGeneratorInterface;
use SymfonyComponentSecurityCoreAuthenticationTokenTokenInterface;
use SymfonyComponentSecurityHttpAuthenticatorAbstractLoginFormAuthenticator;
use SymfonyComponentSecurityHttpAuthenticatorPassport;
use SymfonyComponentSecurityHttpAuthenticatorPassportBadgeUserBadge;
use SymfonyComponentSecurityHttpAuthenticatorPassportBadgePasswordCredentials;
class LoginFormAuthenticator extends AbstractLoginFormAuthenticator
{
public function __construct(
private UrlGeneratorInterface $urlGenerator,
) {
}
protected function getLoginUrl(): string
{
return $this->urlGenerator->generate('app_login');
}
public function authenticate(Request $request): Passport
{
$password = $request->request->get('password', '');
return new Passport(
new UserBadge($request->request->get('email', '')),
new PasswordCredentials($password),
);
}
public function supports(Request $request): bool
{
return $request->attributes->get('_route') === 'app_login'
&& $request->isMethod('POST');
}
public function onAuthenticationSuccess(
Request $request,
TokenInterface $token,
string $firewallName,
): ?Response {
return new RedirectResponse(
$this->urlGenerator->generate('app_home'),
);
}
}
?>
Результат выполнения метода для маршрута app_login:
"/login"
Пример
Давайте зададим адрес формы входа напрямую строкой без генератора маршрутов:
<?php
namespace AppSecurity;
use SymfonyComponentHttpFoundationRequest;
use SymfonyComponentSecurityHttpAuthenticatorAbstractLoginFormAuthenticator;
use SymfonyComponentSecurityHttpAuthenticatorPassport;
use SymfonyComponentSecurityHttpAuthenticatorPassportBadgeUserBadge;
use SymfonyComponentSecurityHttpAuthenticatorPassportBadgePasswordCredentials;
class LoginFormAuthenticator extends AbstractLoginFormAuthenticator
{
protected function getLoginUrl(): string
{
return '/user/login';
}
public function authenticate(Request $request): Passport
{
return new Passport(
new UserBadge($request->request->get('email', '')),
new PasswordCredentials($request->request->get('password', '')),
);
}
public function supports(Request $request): bool
{
return $request->attributes->get('_route') === 'app_login'
&& $request->isMethod('POST');
}
}
?>
Результат выполнения метода:
"/user/login"
Смотрите также
-
класс
AbstractLoginFormAuthenticator,
который является базой для аутентификатора формы входа -
метод
supports,
который определяет, должен ли аутентификатор обрабатывать запрос -
метод
authenticate,
который создаёт паспорт для аутентификации пользователя -
класс
Passport,
который хранит данные для аутентификации пользователя