添加Zend_Auth_Adapter_DbTable的条件

时间:2011-05-15 09:35:57

标签: zend-framework zend-auth

这似乎是一个愚蠢的问题,但在此代码中,我将在何处插入条件'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();
    }

2 个答案:

答案 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