3

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

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

我尝试像这样使用它:

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

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

4

1 回答 1

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"');

或者

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

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

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

[编辑]

$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

于 2012-06-07T10:43:38.903 回答