Новая система аутентификации теперь не делает редирект?

В Symfony 5 и более новых версиях имеется новая система аутентификации, которая называется Guard. В отличие от предыдущей системы, Guard позволяет управлять процессом аутентификации более гибко и точно контролировать его поток.

Одним из изменений в новой системе аутентификации является то, что она больше не выполняет редирект на другую страницу. Вместо этого она возвращает объект Response, который вы можете использовать для ручного управления дальнейшим действием.

По умолчанию, Guard будет возвращать ошибку 401 Unauthorized, если пользователь не прошел аутентификацию. Вы можете изменить это поведение, реализовав метод onAuthenticationFailure в вашем классе Guard.

Например, чтобы выполнить редирект на другую страницу, вы можете модифицировать метод onAuthenticationFailure, чтобы создать объект Response с редиректом на нужный URL:

use SymfonyComponentHttpFoundationRedirectResponse;
use SymfonyComponentSecurityHttpEntryPointAuthenticationEntryPointInterface;
use SymfonyComponentHttpFoundationRequest;
use SymfonyComponentSecurityCoreExceptionAuthenticationException;

class CustomAuthenticationEntryPoint implements AuthenticationEntryPointInterface
{
    public function start(Request $request, AuthenticationException $authException = null)
    {
        // Редирект на нужную страницу
        return new RedirectResponse('/login');
    }
}

Затем, вы можете зарегистрировать свой кастомный EntryPoint в файле security.yaml:

security:
    firewalls:
        main:
            guard:
                authenticators:
                    - AppSecurityCustomAuthenticator
                entry_point: AppSecurityCustomAuthenticationEntryPoint

Таким образом, вы можете контролировать, какие действия предпринимать при неаутентифицированном пользователе в Guard, включая выполнение редиректа или отображение нужного шаблона.