2011-05-15 2 views
4

에 대한 조건을 추가하지만,이 코드에서, 어디에서 ZF 설명서에 an example을 바탕으로 '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

, 당신이에 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

+2

'-> setCredentialTreatment ('? 및 verified = "Y"');'작동합니다. – emaillenin

0

이 게시물을 희망하는 분들께.

또 다른 대안은 어댑터가 건설 된 후 Zend_Auth_Adapter_DbTable의 getDbSelect() 메소드를 사용하는 것입니다 : 인증이 발생 동일한 테이블 내에서 상태를 확인하기 위해 더 나은 방법이있다. 이 메소드는 이 authenticate() 루틴을 완료하는 데 사용할 Zend_Db_Select 객체 인스턴스를 반환합니다. 위의 예를 들어

:

$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