Symfony 2事件侦听器 - 在身份验证失败/防火墙侦听器上

时间:2013-07-07 05:57:44

标签: php symfony

所以我可以执行一个简单的请求监听器:

public function onKernelRequest(GetResponseEvent $event)
{
    $request = $event->getRequest();

        //etc.

在services.yml:

  listener.my_request_listener:
    arguments: 
      - "@translator"
    class: MyBundle\EventListener\RequestListener
    tags: 
      - 
        event: kernel.request
        method: onKernelRequest
        name: kernel.event_listener
      - 
        event: kernel.response
        method: onKernelResponse
        name: kernel.event_listener

我现在要做的是检测身份验证是否失败(使用Symfony2的内置安全组件)。我有所有安全设置,但我需要检测安全性何时失败。像这样:

public function onKernelAuthFail(GetAuthenticationFailEvent $event) {

    //authentication failed, so action can be performed here before it redirects

}

我见过这个:http://api.symfony.com/2.3/Symfony/Component/Security/Http/Firewall/ListenerInterface.html并谈论'防火墙'听众,但我无法理解如何做到这一点。我打赌它只是一行代码或其他东西。

1 个答案:

答案 0 :(得分:1)

看一下DefaultAuthenticationFailureHandler课程。它应该在Symfony\Component\Security\Http\Authentication之下。这是Symfony在身份验证失败时使用的默认侦听器。

但是您可以自己编写并通过将其添加到security.yml中来使用它:

firewalls:
    firewall_name:
        form_login:
            failure_handler: your.service.id

以下是security.yml配置的完整参考: http://symfony.com/doc/current/reference/configuration/security.html