2011-05-15 87 views
4

這似乎是一個愚蠢的問題,但在這個代碼,我哪裏會插入條件'WHERE state=1'添加條件Zend_Auth_Adapter_DbTable

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(); 
    } 

回答

9

基於在ZF手動an example,我會說你可以添加AND state=1成你的setCredentialTreatment()方法:

->setCredentialTreatment('SHA1(CONCAT(?,salt)) AND state = 1'); 
+0

在其中條件不爲我工作。我正在嘗試' - > setCredentialTreatment('verified =「Y」');'根據文檔,我們無法通過這樣的條件 - [doc link](http://framework.zend.com/apidoc/1.0/ Zend_Auth/Zend_Auth_Adapter/Zend_Auth_Adapter_DbTable.html) – emaillenin 2011-06-07 06:39:34

+2

' - > setCredentialTreatment('?and verified =「Y」');'works – emaillenin 2011-06-07 18:17:19

0

對於那些希望進入這篇文章的人。有更好的方法來在認證發生在同一個表中驗證條件:

另一種替代方法是使用 Zend_Auth_Adapter_DbTable的getDbSelect()方法中的適配器被構造之後。這個 方法將返回它將使用的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