2014-10-06 48 views
0

我正在使用adldap库来针对Active Directory对用户进行身份验证。下面是一段代码,我用它来验证Zend LDAP身份验证 - 如何设置身份和getIdentity

$username = $_POST['username']; 
$password = $_POST['password']; 

require_once '/adlap/adLDAP.php'; 

try { 
    $adldap = new adLDAP(); 
} 
catch (adLDAPException $e) { 
    echo $e; 
    exit(); 
} 

$authUser = $adldap->user()->authenticate($username, $password); 

应该如何我setIdentity用户?

在登录系统,我们存储的用户名和密码,我们可以setIdentity如下面提到

$adapter = $this->_getAuthAdapter(); 
$adapter->setIdentity($values['username']); 
$adapter->setCredential($values['password']); 


protected function _getAuthAdapter() { 

     $dbAdapter = Zend_Db_Table::getDefaultAdapter(); 
     $authAdapter = new Zend_Auth_Adapter_DbTable($dbAdapter); 

     $authAdapter->setTableName('users') 
       ->setIdentityColumn('username') 
       ->setCredentialColumn('password') 
       ->setCredentialTreatment('SHA1(CONCAT(?,salt))'); 


     return $authAdapter; 
    } 

我不是在数据库存储密码,直接检查它针对Active Directory。所以我无法使用上述解决方案。 怎能我setIdentity用户的,这样我可以检查用户是否hasIdentity()这样的

$auth = Zend_Auth::getInstance(); 
    if ($auth->hasIdentity()){ 
    } 

我提到了以下问题#1 Get display name for Zend LDAP Authentication。 但是我不确定我们应该如何“获得('LDAP_host')”Zend Registry,我们应该如何设置它。下面是我与 'host'=> Zend_Registry :: get('LDAP_host'),

可以帮我吗?

回答

0

Zend_Registry::get('LDAP_host')只是简单地返回您的LDAP服务器的主机名。在该行代码之前的某处,您会找到一条类似于Zend_Registry::set('LDAP_host', 'ldap.example.com')的行,它将ldap.example.com设置为LDAP服务器。

getAuthAdapter()在你的情况下返回一个Zend_Auth_Adapter_DbTable的实例,但你想要一个Zend_Auth_Adapter_Ldap的实例。所以你必须调用不同的方法/函数getLdapAuthAdapter()或重写当前的方法。

public function getLdapAuthAdapter() { 
    return new Zend_Auth_Adapter_Ldap(array(
     'host'     => 'ldap.example.com', 
     'accountDomainName'  => 'example.com', 
     'accountDomainNameShort' => 'EXAMPLE', 
     'accountCanonicalForm' => 3, 
     'username'    => "CN=user1,DC=example,DC=com", 
     'password'    => 'pass1', 
     'baseDn'     => "DC=example,DC=com", 
     'bindRequiresDn'   => true, 
    )); 
} 

$adapter = $this->getLdapAuthAdapter(); 
$adapter->setIdentity($values['username']); 
$adapter->setCredential($values['password']); 
$result = $adapter->authenticate(); 

希望有所帮助。

+0

非常感谢:)请试一试,让你知道它是如何工作的 – Thanu 2014-10-06 11:31:53