2010-02-16 64 views
1

我正在使用Zend_Auth驗證用戶憑據並遇到問題。我需要有一個雙列身份。這兩列是用戶名和客戶標識符。 identityColumn設置和setIdentity()方法不允許這種情況。我試圖通過使用credentialTreatment設置來實現此目的,但是當我爲兩個或更多客戶重複使用用戶名時,它僅僅爲其他客戶計算zend_auth_credential_match爲false,而不是過濾這些用戶。Zend身份驗證與兩個身份列

這裏是被Zend驗證執行結果查詢的消毒例如:

SELECT `users`.*, 
    (CASE 
     WHEN `password` = 'password' 
      AND active = 1 
      AND customer_id = 1 
      THEN 1 
     ELSE 0 
     END) AS `zend_auth_credential_match` 
FROM `users` 
WHERE (`username` = 'username') 

是否有必要延長Zend_Auth模塊做到這一點?有沒有其他人做過,可以提供一個例子?

謝謝!

回答

5

我想你會需要編寫你自己的Zend_Auth_Adapter_DbTable的子類來處理這個問題。

喜歡的東西:

class My_Auth_Adapter extends Zend_Auth_Adapter_DbTable { 
    protected $_customerColumn = 'customer_id'; 
    protected $_customerId = false; 

    public function setCustomerId($id) { 
    $this->_customerId = $id; 
    return $this; 
    } 

    public function getCustomerId() { 
    return $this->_customerId!==false?$this->_customerId:''; 
    } 

    public function _authenticateCreateSelect() { 
    $select = parent::_authenticateCreateSelect(); 
    $select->where($this->_zendDb->quoteIdentifier($this->_customerColumn, true)." = ?", $this->getCustomerId()); 
    return $select; 
    } 
} 
+0

這比我想要擴展'Zend_Auth_Adapter_DbTable'以容納多個標識列的想法簡單得多。現在測試...工作! – Sonny

3

最好的方法是編寫自己的Auth適配器。也許甚至直接擴展Zend_Auth_Adapter_DbTable。

+0

這就是我要的道路,但我想確保我不缺少明顯的東西。 – Sonny