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. Что нужно сделать для правильной работы с валидацией в данном случае?


Ответы (0 шт):