Есть ли какое-либо событие «до входа» или подобное? - PullRequest
10 голосов
/ 06 декабря 2011

Мне нужно выполнить некоторый код перед проверкой правильности учетных данных пользователя. В настоящее время я достигаю этого с помощью специального прослушивателя событий, который запускает событие kernel.request и проверяет, соответствует ли запрошенный URL-адрес security.yml check_path. Но это неэффективно, так как выполняется при каждом запросе. Мне известно о событии onSecurityInteractiveLogin, но я считаю, что оно происходит после успешной попытки входа в систему. Кто-нибудь знает, есть ли событие перед входом в систему, или где я мог бы отправить собственное событие самостоятельно?

1 Ответ

12 голосов
/ 08 декабря 2011

Итак, нет никакого «официального» события перед входом в систему.Но, к счастью, его не сложно установить, так как Symfony2 настолько расширяем.Хитрость заключается в том, чтобы использовать собственный сервис для обработки аутентификации.

Symfony использует этот класс при использовании формы входа:

Symfony\Component\Security\Http\Firewall\UsernamePasswordFormAuthenticationListener

Если вы переопределяете security.authentication.listener.form.classПараметр (первоначально определенный в Symfony\Bundle\SecurityBundle\Resources\config\security_listeners.xml) позволяет использовать пользовательский прослушиватель, который расширяет UsernamePasswordFormAuthenticationListener.

Все, что осталось сделать, - это переопределить метод attemptAuthentication() для отправки настраиваемого события.

(На самом деле вам также необходимо сохранить диспетчер событий как свойство класса в __construct())

Этот метод должен работать с другими методами аутентификации - все, что вам нужно сделать, это изменить соответствующий слушатель (например, BasicAuthenticationListener, X509AuthenticationListener и т. Д.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...