0

このバンドルを実装しようとしています: 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()));
    }
}

私は何時間も試みており、バンドル コードをデバッグしており、LDAP に接続して次のエラーが発生していると 100% 言えます。

//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 ステートメントの後に配置すると、無効な資格情報の例外がスローされることを意味します。

4

2 に答える 2

0

問題はここにあります:

ListenerClass が Config objetc にアクセスしようとすると失敗します。リスナーでこれをコメントしてみてください。

    //これは例外をスローします
    //$config = $this->appContext->getConfig();
    //$ldapConf = $config['ldap'];

    //if (!in_array($user->getUsername(), $ldapConf['allowed'])) {
    // 新しい \Exception(sprintf('LDAP ユーザー %s は許可されていません', $user->getUsername())) をスローします。
    //}

于 2013-04-30T00:15:25.020 に答える