Вам необходимо определить entry_point
на ваш брандмауэр, чтобы вы могли вернуть неавторизованный ответ. Информацию о точках входа можно найти в документации here. Я скопирую этот параграф в случае будущих запросов здесь.
Когда пользователь не аутентифицирован вообще (то есть, когда в хранилище токенов еще нет токена), точка входа в брандмауэр будет вызываться для «запуска» процесса аутентификации. Точка входа должна реализовывать AuthenticationEntryPointInterface, которая имеет только один метод: start(). Этот метод получает текущий объект Request и исключение, из которого был вызван прослушиватель исключений. Метод должен возвращать объект Response. Это может быть, например, страница, содержащая форму входа или, в случае базовой HTTP-аутентификации, ответ с заголовком WWW-Authenticate, который будет предлагать пользователю указать свое имя пользователя и пароль.
Для того, чтобы сделать это, вам необходимо создать класс, который будет определен как услуга.
Он должен выглядеть следующим образом:
namespace MyBundle\Service;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Security\Http\EntryPoint\AuthenticationEntryPointInterface;
use Symfony\Component\Security\Core\Exception\AuthenticationException;
class CustomEntryPoint implements AuthenticationEntryPointInterface
{
public function start(Request $request, AuthenticationException $authException = null)
{
$response = new Response("", Response::HTTP_UNAUTHORIZED);
return $response;
}
}
И в файле services.yml
services:
service.entry_point:
class: MyBundle\Service\CustomEntryPoint
И, наконец, передать идентификатор службы service.entry_point
к вашему entry_point
опции в firewall
разделе security.yml
файла.
Это должно сделать трюк.
Можно ли отключить auth с помощью 'entry_point'? –