在Zend身份验证中,如何检查其他列以及身份验证?

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)

Ale*_*tau 6

我更改了你的代码:

$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)