Существует ли какое-либо событие «pre login» или подобное?

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

Таким образом, не существует «официального» события предварительного входа. Но, к счастью, это не сложно, так как 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 и т. Д.).