【问题标题】:Symfony 2 event listener - on authentication fail / firewall listenerSymfony 2 事件监听器 - 身份验证失败/防火墙监听器
【发布时间】:2013-07-04 18:49:36
【问题描述】:

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

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 并谈到“防火墙”听众,但我就是不明白该怎么做。我敢打赌这只是一行代码之类的。

【问题讨论】:

    标签: php symfony


    【解决方案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

    【讨论】:

    • 那么当我这样做时,我是在扩展原始类还是编写一个全新的类?扩展似乎更好。
    • 我认为在这种情况下它们会更好:)
    • 我仍在努力使这项工作正常进行,并且与此处发布的答案非常接近,但是如果您能帮助完成最后的事情,那就太好了:stackoverflow.com/questions/17515391/…
    猜你喜欢
    • 2018-04-02
    • 2013-08-14
    • 1970-01-01
    • 2014-07-27
    • 1970-01-01
    • 2015-12-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多