У меня это настроено в security.yml
;
failure_path: /login
Это перенаправляет пользователя на страницу входа, если он не прошел проверку подлинности при попытке доступа к определенным URL-адресам, установленным в access_control
, например.
access_control:
- { path: ^/admin, role: ROLE_ADMIN }
Но я не могу зафиксировать это перенаправление.
Я пытался использовать службу для события security.authentication.failure
, но это не работает
app.security.authentication_failure_event_listener:
class: MemberBundle\Event\AuthenticationListener
tags:
- { name: kernel.event_listener, event: security.authentication.failure, method: onAuthenticationFailure }
Перенаправление по-прежнему происходит, и onAuthenticationFailure
никогда не вызывается. Предположительно, потому что аутентификация явно не провалилась. Пользователь просто не вошел в систему и перенаправлен.
Причина в том, что я хочу дать другой ответ в зависимости от ожидаемого формата. Например, я хочу, чтобы html-запросы переходили на страницу входа, но запросы JSON должны возвращать действительный JSON, а не страницу формы входа в HTML.
Я чувствую, что FOSRestBundle может справиться с этим, но кажется излишним для этой относительно простой потребности. И это не веб-сайт RESTFul, поэтому мне не нужен этот пакет для этого?
Я также пробовал службу для прослушивания исключений, но это тоже не сработало. Я предполагаю, что перенаправление, которое происходит, не вызывает исключение?
app.exception_listener:
class: AppBundle\EventListener\ExceptionListener
tags:
- { name: kernel.event_listener, event: kernel.exception }
Итак, как я могу всегда фиксировать событие перенаправления, которое происходит, когда failure_path
установлено в security.yml
?