Symfony 4: Login form + LoginAuthenticator
Делаю форму для авторизации на сайте с помощью symfony forms. До этого создал authenticator LoginFormAuthenticator. Вот часть кода из него:
public function supports(Request $request)
{
return $request->attributes->get('_route') === 'app_login'
&& $request->isMethod('POST');
}
public function getCredentials(Request $request)
{
$credentials = $request->request->get('user_login_form');
//need to remember last user email
$request->getSession()->set(
Security::LAST_USERNAME,
$credentials['emailOrPhone']
);
return $credentials;
}
public function getUser($credentials, UserProviderInterface $userProvider)
{
$token = new CsrfToken('authenticate', $credentials['_token']);
if(!$this->csrfTokenManager->isTokenValid($token)) {
throw new InvalidCsrfTokenException();
}
return $this->userRepository->findOneByEmailOrPhone($credentials['emailOrPhone']);
}
public function checkCredentials($credentials, UserInterface $user)
{
return $this->passwordEncoder->isPasswordValid($user, $credentials['plainPassword']);
}
public function onAuthenticationSuccess(Request $request, TokenInterface $token, $providerKey)
{
$targetPath = $this->getTargetPath($request->getSession(), $providerKey);
if ($targetPath) {
return new RedirectResponse($targetPath);
}
return new RedirectResponse($this->router->generate('app_homepage'));
}
После того, как форма заработала, хотелось бы иметь возможность валидации формы. Однако когда я пытаюсь обработать форму в контроллере SecurityController следующим образом
public function login(AuthenticationUtils $authenticationUtils, Request $request)
{
if ($this->get('security.authorization_checker')->isGranted('IS_AUTHENTICATED_FULLY')) {
return $this->redirectToRoute('app_homepage');
} else {
$error = $authenticationUtils->getLastAuthenticationError();
$lastEmail = $authenticationUtils->getLastUsername();
$form = $this->createForm(UserLoginFormType::class);
if ($request->isMethod('POST')) {
if ($form->isSubmitted() && $form->isValid()) {
...
}
}
то проверки не срабатывают, т.к. сначала вызывается метод supports у LoginFormAuthenticator. Что нужно сделать для правильной работы с валидацией в данном случае?