我有一个场景,我需要在进行身份验证时检查一些额外的列。这是因为,应用程序将一些用户名存储在数据库中,而一些用户名存储在 LDAP 中。身份验证优先级适用于数据库中的用户名。如果数据库中存在用户名,我们将不会在 LDAP 中检查,否则我们将在 LDAP 中检查。
对于 LDAP 用户,我们将用户名的副本保存在同一个“用户”表中,并带有空白密码列。为了让这两组用户都感到恶心,还有一个名为 userDirectory 的附加列,其值为“LDAP 和 INTERNAL”。我们必须保留一份 LDAP 用户名的副本,以用于应用程序特定的设置和所有内容。
username+userDirectory 也是一个 uniqueKey
现在我的问题是,有时会有多个用户具有相同的用户名但在不同的用户目录中。如上所述,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);