是否存在任何类型的"登录前"事件或类似事件?

Ste*_*nte 10 php symfony

我需要在检查用户的凭据是否正确之前运行一些代码.目前,我正在通过触发事件的自定义事件侦听器实现此目的,kernel.request并检查请求的URL是否与security.yml的check_path设置匹配.但这是低效的,因为它运行在每个请求上.我知道这个onSecurityInteractiveLogin事件,但我相信在成功登录尝试后会发生火灾.有谁知道是否有预登录事件,或者我可以自己发送自定义事件?

Ste*_*nte 12

因此,没有"官方"登录前事件.但幸运的是,由于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等)