为了在网站上进行身份验证,我使用 Zend_Auth_Adapter_DbTable。一切正常,但 Zend Framework 只允许在表中使用唯一标识。
作为身份,我使用用户的邮件地址。问题是,这个邮件地址在表中有更多的项目。用户可以删除那里的帐户,所以我不删除整行,我只将状态更改为 -2 或其他。活跃用户的状态为 1。
我试着像这样使用它:
$authAdapter = new Zend_Auth_Adapter_DbTable($db, 'user', 'email', 'password', "? AND `status`='1'");
$authAdapter->setIdentity($email);
$authAdapter->setCredential($password);
但它不起作用。如果我删除具有相同邮件地址的非事件用户,一切正常。这是为什么?
最佳答案
你可以这样做
$authAdapter->setIdentity($email);
$authAdapter->setCredential($password);
$select = $authAdapter->getDbSelect();
$select->where('status = 1');
试试这个完整的代码
$authAdapter = new Zend_Auth_Adapter_DbTable($db, 'user', 'email', 'password');
$authAdapter->setIdentity($email);
$authAdapter->setCredential($password);
$select = $authAdapter->getDbSelect();
$select->where('status = "1"');
或
$authAdapter = new Zend_Auth_Adapter_DbTable(Zend_Db_Table::getDefaultAdapter());
$authAdapter->setTableName('user')
->setIdentityColumn('email')
->setCredentialColumn('password');
$select = $authAdapter->getDbSelect();
$select->where('status = "1"');
[编辑]
或者
$authAdapter = new Zend_Auth_Adapter_DbTable($db, 'user', 'email', 'password');
$authAdapter->setIdentity($email);
$authAdapter->setCredential($password);
$authAdapter->setCredentialTreatment('? and status = "1"');
关于zend-framework - Zend_Auth_Adapter_DbTable 标识不是唯一的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10930144/