这似乎是一个愚蠢的问题,但在此代码中,我将在何处插入条件'WHERE state=1'
public function loginByUsernameAndPassword($username, $password)
{
$this->_auth_adapter = new Zend_Auth_Adapter_DbTable( $this->getAdapter() );
$this->_auth_adapter->setTableName('zend_administration_user')
->setIdentityColumn('user_nm')
->setCredentialColumn('password')
->setCredentialTreatment('SHA1(CONCAT(?,salt))');
$this->_auth_adapter->setIdentity($username)
->setCredential($password);
$result = Zend_Auth::getInstance()->authenticate($this->_auth_adapter);
return $result->isValid();
}
答案 0 :(得分:9)
根据zf手册中的an example,我会说你可以将AND state=1
添加到你的setCredentialTreatment()方法中:
->setCredentialTreatment('SHA1(CONCAT(?,salt)) AND state = 1');
答案 1 :(得分:0)
对于那些希望进入这篇文章的人。有更好的方法来验证发生身份验证的同一个表中的条件:
另一种选择是使用的getDbSelect()方法 构造适配器后的Zend_Auth_Adapter_DbTable。这个 方法将返回它将用于的Zend_Db_Select对象实例 完成authenticate()例程。
对于上面的示例:
$select = $this->_auth_adapter->getDbSelect();
$select->where('state = 1');
// authenticate, this ensures that zend_administration_user.state = 1
$adapter->authenticate();
来源:http://framework.zend.com/manual/1.12/en/zend.auth.adapter.dbtable.html