我正在使用adldap库来针对Active Directory对用户进行身份验证。下面是我用来验证的代码片段
$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进行检查。所以我无法使用上述解决方案。
我该如何设置用户身份,以便我可以检查用户是否具有像这样的
$auth = Zend_Auth::getInstance();
if ($auth->hasIdentity()){
}
我引用了以下Stackoverflow问题 Get display name for Zend LDAP Authentication。 但是我不确定我们将如何“获取('LDAP_host')”Zend Registry以及我们应该如何设置它。下面是我困惑的代码行 'host'=>要是Zend_Registry ::得到( 'LDAP_host'),
有人可以帮帮我吗?
答案 0 :(得分: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();
希望以某种方式帮助。