对于网站上的身份验证,我使用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);
但它不起作用。如果我删除具有相同邮件地址的非活动用户,一切正常。那是为什么?
答案 0 :(得分:2)
你可以这样做
$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"');
OR
$authAdapter = new Zend_Auth_Adapter_DbTable(Zend_Db_Table::getDefaultAdapter());
$authAdapter->setTableName('user')
->setIdentityColumn('email')
->setCredentialColumn('password');
$select = $authAdapter->getDbSelect();
$select->where('status = "1"');
<强> [编辑] 强>
OR
$authAdapter = new Zend_Auth_Adapter_DbTable($db, 'user', 'email', 'password');
$authAdapter->setIdentity($email);
$authAdapter->setCredential($password);
$authAdapter->setCredentialTreatment('? and status = "1"');