У меня есть это в security.yml
;Захват события неудачного входа в Symfony3
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
?
Не могли бы вы дать мне отзыв о моем ответе? –
@gp_sflover еще нет, я еще не использовал его и ваше окончательное предложение, которое я уже пробовал, как указано в моем первоначальном вопросе –