未调用symfony2侦听器

时间:2013-04-25 16:39:05

标签: symfony ldap listener

我正在尝试实施此捆绑包:https://github.com/BorisMorel/LdapBundle

除了听众之外,我有所有设置和工作的东西 - 它只是不会运行并且探查器显示以下内容:

Not Called Listeners

Event name  Listener
imag_ldap.security.authentication.pre_bind   LdapSecurityListener::onPreBind
kernel.exception     ExceptionListener::onKernelException
kernel.exception     ProfilerListener::onKernelException
kernel.exception     ExceptionListener::onKernelException
kernel.view  TemplateListener::onKernelView

这是我的service.yml:

services:
    ldap.listener:
        class: Riviera\PlutusBundle\EventListener\LdapSecurityListener
        tags:
            - {name: kernel.event_listener, event: imag_ldap.security.authentication.pre_bind, method:onPreBind}

这是我的倾听者:

<?php

namespace Riviera\PlutusBundle\EventListener;

//use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use IMAG\LdapBundle\Event\LdapUserEvent;

/**
 * Performs logic before the user is found to LDAP
 */
    class LdapSecurityListener
    {

    /**
     * Modifies the User before binding data from LDAP
     *
     * @param \IMAG\LdapBundle\Event\LdapUserEvent $event
     */
    public function onPreBind(LdapUserEvent $event)
    {
        $user = $event->getUser();
        $config = $this->appContext->getConfig();

        throw new \Exception(sprintf('Username: %s', $user->getUsername()));
    }
}

我已经尝试了几个小时,我一直在调试捆绑代码,并且可以100%说它连接到LDAP并且在以下方面失败:

//IMAG\LdapBundle\Provider\LdapAuthenticationProvider.php
try {
     $this->dispatcher->dispatch(LdapEvents::PRE_BIND, $userEvent);
} catch (\Exception $expt) {
     if ($this->hideUserNotFoundExceptions) {
        throw new BadCredentialsException('Bad credentials', 0, $expt);
     }

     throw $expt;
}

任何想法/想法?

修改

根据下面的注释,侦听器未被调用,我认为ldap功能依赖于调用侦听器。

如果我在die()之前放置try{}catch{}语句,我可以在浏览器中看到它,但是如果我把它放在die语句之后永远不会触发,这意味着它抛出了错误的凭证异常。

2 个答案:

答案 0 :(得分:0)

事实证明,正在调用侦听器并抛出异常,但ldap模块中的某些功能通过将其屏蔽为错误的凭据异常来隐藏抛出的异常。

由于$this->hideUserNotFoundExceptions等于true而发生的事情,据我所见,在构造中将默认值设置为true(无法看到其他被调用的地方)

无论如何,我删除了侦听器中的异常,现在我已经通过了登录屏幕。但它似乎仍然没有设置登录凭据(安全性下没有令牌),但这是一个不同的问题。

答案 1 :(得分:0)

问题在于:

当ListenerClass尝试访问Config时,objetc失败。尝试在你的听众中评论这个。


    //This throw an exception
    //$config = $this->appContext->getConfig();
    //$ldapConf = $config['ldap'];

    //if (!in_array($user->getUsername(), $ldapConf['allowed'])) {
    //       throw new \Exception(sprintf('LDAP user %s not allowed', $user->getUsername()));
    //}