我已成功为Zend_Auth
模块实施Zend Framework LDAP adapter,并可以登录我的Active Directory控制器。但是,getIdentity()
方法只返回用户名(适用于数据库外键使用),而我想(另外)获取用户对象的“cn”或“displayname”属性以显示在网页上本身。
我在getLdap()
对象上看到了Zend_Auth_Adapter_Ldap
方法,但在结果对象上看到了对Zend_Auth的身份验证。有没有办法获得用户通过身份验证并获取数据的LDAP连接?
答案 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();
}
该方法允许您选择性地设置要检索的属性。