2010-02-16 17 views
1

J'utilise Zend_Auth pour valider les informations d'identification de l'utilisateur et rencontré un problème. Je dois avoir une identité à deux colonnes. Les deux colonnes sont le nom d'utilisateur et l'identifiant du client. Le paramètre identityColumn et setIdentity() ne permettent pas ce scénario. J'ai essayé d'accomplir cela en utilisant le paramètre credentialTreatment, mais lorsque j'ai un nom d'utilisateur en double pour deux clients ou plus, il calcule simplement le zend_auth_credential_match comme faux pour les autres clients plutôt que de filtrer ces utilisateurs.Zend Auth avec deux colonnes d'identité

Voici un aseptisé exemple de la requête résultante exécutée par Zend Auth:

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

Est-il nécessaire d'étendre le module Zend_Auth de le faire? Quelqu'un d'autre l'a-t-il fait et peut-il donner un exemple?

Merci!

Répondre

5

J'imagine que vous aurez besoin d'écrire votre propre sous-classe de Zend_Auth_Adapter_DbTable pour gérer cela.

Quelque chose comme:

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

C'est beaucoup plus simple que mon idée d'étendre le 'Zend_Auth_Adapter_DbTable' pour accueillir plusieurs colonnes d'identité. Test maintenant ... fonctionne! – Sonny

3

La meilleure façon de le faire serait d'écrire votre propre adaptateur Auth. Peut-être même étendre Zend_Auth_Adapter_DbTable directement.

+0

C'est la route que je vais descendre, mais je voulais vous assurer que je ne manque pas une chose évidente. – Sonny