cod*_*lib 2 zend-framework zend-auth
我有一个场景,我需要在进行身份验证时检查一些其他列.这是因为,应用程序将一些用户名存储在数据库中,一些用户名存储在LDAP中.身份验证优先级适用于数据库中的用户名.如果数据库中存在用户名,我们将不会检入LDAP,否则我们将在LDAP中进行检查.
对于LDAP用户,我们在同一个"用户"表中保留了一个用户名的副本,其中包含一个空密码列.为了令两组用户感到厌恶,还有一个名为userDirectory的列,其值为"LDAP和INTERNAL".我们必须为应用程序特定设置和所有设置保留LDAP用户名的副本.
username + userDirectory也是uniqueKey
现在我的问题是,有时会有多个用户具有相同的用户名但在不同的userDirectory中.如上所述,LDAP用户不会将密码存储在数据库中,并且该身份验证是一个单独的代码段.
我使用以下代码进行数据库身份验证.即使我添加条件setCredentialTreatment('md5(?)AND userDirectory ="internal"'),它也在搜索LDAP用户.我如何限制userDirectory ='internal'
$dbAdapter = Zend_Db_Table::getDefaultAdapter();
$authAdapter = new Zend_Auth_Adapter_DbTable($dbAdapter);
$authAdapter->setTableName('users')
->setIdentityColumn('username')
->setCredentialColumn('password')
->setCredentialTreatment('md5(?) AND userDirectory="internal"');
$authAdapter->setIdentity($username);
$authAdapter->setCredential($password);
Run Code Online (Sandbox Code Playgroud)
我更改了你的代码:
$dbAdapter = Zend_Db_Table::getDefaultAdapter();
$authAdapter = new Zend_Auth_Adapter_DbTable($dbAdapter);
$authAdapter->setTableName('users')
->setIdentityColumn('username')
->setCredentialColumn('password')
->setCredentialTreatment('MD5(?)'); // changed
$authAdapter->setIdentity($username);
$authAdapter->setCredential($password);
$authAdapter->getDbSelect()->where('userDirectory = "internal"'); // added
Run Code Online (Sandbox Code Playgroud)