4

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

2 回答 2

9

根据zf 手册中的示例,我会说您可以添加AND state=1到 setCredentialTreatment() 方法中:

->setCredentialTreatment('SHA1(CONCAT(?,salt)) AND state = 1');
于 2011-05-15T10:50:51.137 回答
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

于 2015-10-19T21:34:48.137 回答