Zend_Auth_Adapter_DbTable标识不唯一

时间:2012-06-07 10:37:15

标签: zend-framework authentication

对于网站上的身份验证,我使用Zend_Auth_Adapter_DbTable。一切正常,但Zend Framework只允许表中的唯一身份。

作为身份我使用我的用户的邮件地址。问题是,这个邮件地址表中有更多项目。用户可以删除该帐户,所以我不删除整行,我只将状态更改为-2或其他。活动用户的状态为1。

我试着像这样使用它:

    $authAdapter = new Zend_Auth_Adapter_DbTable($db, 'user', 'email', 'password', "? AND `status`='1'");
    $authAdapter->setIdentity($email);
    $authAdapter->setCredential($password);

但它不起作用。如果我删除具有相同邮件地址的非活动用户,一切正常。那是为什么?

1 个答案:

答案 0 :(得分:2)

你可以这样做

$authAdapter->setIdentity($email);
$authAdapter->setCredential($password);

$select = $authAdapter->getDbSelect();
$select->where('status = 1'); 

试用此完整代码

 $authAdapter = new Zend_Auth_Adapter_DbTable($db, 'user', 'email', 'password');
     $authAdapter->setIdentity($email);
    $authAdapter->setCredential($password);
    $select = $authAdapter->getDbSelect();
            $select->where('status = "1"');

OR

$authAdapter = new Zend_Auth_Adapter_DbTable(Zend_Db_Table::getDefaultAdapter());

       $authAdapter->setTableName('user')
            ->setIdentityColumn('email')
            ->setCredentialColumn('password');     

        $select = $authAdapter->getDbSelect();
        $select->where('status = "1"');

<强> [编辑]
OR

$authAdapter = new Zend_Auth_Adapter_DbTable($db, 'user', 'email', 'password');
         $authAdapter->setIdentity($email);
        $authAdapter->setCredential($password);
$authAdapter->setCredentialTreatment('? and status = "1"');

仅供参考:zend.auth.adapter.dbtable