获取Zend LDAP身份验证的显示名称

时间:2011-09-19 21:49:07

标签: zend-framework

我已成功为Zend_Auth模块实施Zend Framework LDAP adapter,并可以登录我的Active Directory控制器。但是,getIdentity()方法只返回用户名(适用于数据库外键使用),而我想(另外)获取用户对象的“cn”或“displayname”属性以显示在网页上本身。

我在getLdap()对象上看到了Zend_Auth_Adapter_Ldap方法,但在结果对象上看到了对Zend_Auth的身份验证。有没有办法获得用户通过身份验证并获取数据的LDAP连接?

2 个答案:

答案 0 :(得分:1)

好吧,我发现了一种突破Zend_Auth模块并直接使用Zend_Ldap模块的方法。如果有人知道如何使用Auth或AuthAdapter对象,我会很高兴学习!

我正在使用Zend_Registry存储各种LDAP选项,然后使用当前用户信息:

登录功能:

$authAdapter = new Zend_Auth_Adapter_Ldap(array(
    'server1' => array(
        'host' => Zend_Registry::get('LDAP_host'),
        'accountDomainName' => Zend_Registry::get('LDAP_domainName'),
        'accountCanonicalForm' => 2,
        'baseDn' => Zend_Registry::get('LDAP_baseDn'),
        'bindRequiresDn' => TRUE,
    )
));
$authAdapter->setIdentity($_POST['username']);
$authAdapter->setCredential($_POST['passwd']);
$auth = Zend_Auth::getInstance();

// Do the login
$rs = $auth->authenticate($authAdapter);
if (!$rs->isValid()) {
    // Login failed
    exit;
}
// Login succeeded

检查经过身份验证的用户:如果我们当前已通过身份验证,请使用与AuthAdapter类似的选项创建Zend_Ldap对象,然后搜索此用户ID。

$auth = Zend_Auth::getInstance();
if ($auth->hasIdentity()) {
    $uid = $auth->getIdentity();
    Zend_Registry::set('cur_user', $uid); // Save username
    $ldap = new Zend_Ldap(array(
        'host' => Zend_Registry::get('LDAP_host'),
        'accountDomainName' => Zend_Registry::get('LDAP_domainName'),
        'accountCanonicalForm' => 2,
        'baseDn' => Zend_Registry::get('LDAP_baseDn'),
        'bindRequiresDn' => TRUE,
    ));
    $ldap->bind();
    $rs = $ldap->getEntry('uid='.$uid.','.Zend_Registry::get('LDAP_baseDn'), array('displayname', 'mail'));
    Zend_Registry::set('cur_user_name', $rs['displayname'][0]);
    Zend_Registry::set('cur_user_mail', $rs['mail'][0]);
} else {
    Zend_Registry::set('cur_user', 'Anonymous');
    Zend_Registry::set('cur_user_name', 'Anonymous');
    Zend_Registry::set('cur_user_mail', 'nobody@nowhere.com');
}

答案 1 :(得分:0)

Zend_Auth_Adapter_Ldap定义了一个方法getAccountObject,可以做你想做的事。

例如

$adapter = new Zend_Auth_Adapter_Ldap($options, $username, $password);

$result = $auth->authenticate($adapter);

if ($result->isValid()) {
   $user_data = $adapter->getAccountObject();
}

该方法允许您选择性地设置要检索的属性。