2012-06-07 59 views
3

對於在網站上進行身份驗證,我使用Zend_Auth_Adapter_DbTable。一切正常,但Zend Framework只允許表中的唯一標識。Zend_Auth_Adapter_DbTable身份不唯一

作爲身份我使用我的用戶的郵件地址。問題是,使用此郵件地址的表中有更多項目。用戶可以刪除那裏的帳戶,所以我不會刪除整行,我只將狀態更改爲-2或其他東西。活躍用戶的狀態1.

我嘗試使用它,像這樣:

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

但它不工作。如果我使用相同的郵件地址刪除不活動的用戶,那麼所有的工作都是可行的。這是爲什麼?

回答

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

[編輯]

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

FYI:zend.auth.adapter.dbtable

+0

嗯不起作用。如果我var_dump的選擇,像這樣:var_dump($ select - > __ toString());我得到一個空字符串。並且每個驗證碼都是真實的,即使我使用了錯誤的密碼... – volf

+0

檢查更新了安裝程序 – Venu

+0

您正在使用哪個版本? – Venu