2010-03-18 31 views
2

登錄表單:Zend_Auth多個憑據?

$authAdapter = Zend_Registry::get('authAdapter'); 
    $authAdapter 
    ->setIdentity($formData['email']) 
    ->setCredential($password) 
    ->setCredential(1); 

引導:

protected function _initAuth(){ 
    $this->bootstrap('db'); 
    $this->bootstrap('session'); 

    $db    = $this->getPluginResource('db')->getDbAdapter(); 
    $auth   = Zend_Auth::getInstance(); 
    $authAdapter = new Zend_Auth_Adapter_DbTable($db, 'User', 'email', 'password', 'enabled'); 

    Zend_Registry::set('authAdapter', $authAdapter); 
    return $authAdapter; 
} 

顯然因爲加入 '啓動' 它停止工作,如果我刪除:

->setCredential(1); 

和 '啓用' 從那裏:

($db, 'User', 'email', 'password', 'enabled'); 

它工作的很好...

我想只啓用擁有已啓用帳戶的用戶登錄。

編輯:

 $authAdapter = new Zend_Auth_Adapter_DbTable($db, 'User', 'email', 'password', '(?) AND `enabled` = 1'); 

作品:)

回答

1

您需要修改您的適配器像這樣:

$authAdapter = new Zend_Auth_Adapter_DbTable(
    $db, 
    'user', 
    'email', 
    'password', 
    'MD5(?) AND `enabled` = "true"'); 
1

請嘗試:

$authAdapter = new Zend_Auth_Adapter_DbTable($db, 'User', 'email', 'password', 'AND enabled  > 1'); 

和刪除:

->setCredential(1); 
+0

這不起作用附加條件。事實上,我將'AND' enabled' =「1」'改爲'AND jimmy = blah',但它仍然登錄,導致我相信它忽略了最後一個字段! – azz0r 2010-03-18 11:45:03

+0

看到第一篇文章:它是: \t \t $ authAdapter = new Zend_Auth_Adapter_DbTable($ db,'User','email','password','(?)AND'enabled' = 1'); – azz0r 2010-03-18 11:54:50

+0

這個如何: $ authAdapter = new Zend_Auth_Adapter_DbTable($ db,'User','email','password'); 然後 $ select = $ authAdapter-> getDbSelect(); $ select-> where('enabled = 1'); $ authAdapter-> authenticate(); 您正在使用哪種ZF版本? thx – 2010-03-18 11:55:28

0

您可以設置在身份驗證適配器即

$select = $authAdapter->getDbSelect(); 
$select->where("isActive = ?","Active");