2009-10-19 5 views
0

J'ai une classe R00_Model_User, qui, curieusement, représente l'utilisateur tel qu'il est. Can $ result-> getIdentity() me renvoie un objet de cette classe? (Ou peut-être que c'est stupide?)Can (et devrait?) Zend_Auth retourne la classe en tant qu'identité?

(Il existe une méthode d'usine R00_Model_User qui empêche de dupliquer des objets. Je voudrais Zend_Auth l'utiliser au lieu de créer un nouvel objet, si elle peut)

Répondre

2

Deux options:

  • écrire votre propre adaptateur d'authentification sous-classement du hors-the-box adaptateur qui correspond à votre meilleur scénario

    class R00_Auth_Adapter extends Zend_Auth_Adapter_* 
    { 
        /** 
        * authenticate() - defined by Zend_Auth_Adapter_Interface. This method is called to 
        * attempt an authentication. Previous to this call, this adapter would have already 
        * been configured with all necessary information to successfully connect to a database 
        * table and attempt to find a record matching the provided identity. 
        * 
        * @throws Zend_Auth_Adapter_Exception if answering the authentication query is impossible 
        * @return Zend_Auth_Result 
        */ 
        public function authenticate() 
        { 
         $result = parent::authenticate(); 
         if ($result->isValid() { 
          return new Zend_Auth_Result(
           $result->getCode(), 
           R00_Model_User::load($result->getIdentity()), 
           $result->getMessages() 
          ); 
         } else { 
          return $result; 
         } 
        } 
    } 
    

    Cela vous permettra de coder

    $adapter = new R00_Auth_Adapter(); 
    //... adapter initialisation (username, password, etc.) 
    $result = Zend_Auth::getInstance()->authenticate($adapter); 
    

    et sur l'authentification réussie votre objet utilisateur est automatiquement stocké dans l'authentica stockage de stockage (session par défaut).

  • ou utilisez votre login-action pour mettre à jour l'identité de l'utilisateur stocké

    $adapter = new Zend_Auth_Adapter_*(); 
    $result = $adapter->authenticate(); 
    if ($result->isValid()) { 
        $user = R00_Model_User::load($result->getIdentity()); 
        Zend_Auth::getInstance()->getStorage()->write($user); 
    } 
    
0

Dans un de mes applications, j'ai getIdentity() retourne un objet utilisateur, et ça marche plutôt bien pour moi. Pour utiliser votre méthode d'usine, comme cela:

$auth = Zend_Auth::getInstance(); 
$user = R00_Model_User::getInstance(...); 
$auth->getStorage()->write($user); 

Quand vous appelez getIdentity(), vous aurez votre objet utilisateur.

+0

Hm. Vous n'utilisez pas le code d'autorisation de ZF et le faites vous-même, n'est-ce pas? Je vais y réfléchir, mais ça ne semble pas être un ZF-way :) –

+0

Je ne suis pas sûr de ce que tu veux dire? J'utilise Zend_Auth mais je l'ai juste stocké un objet au lieu d'une chaîne. –

+0

par défaut Z_Auth stocke le nom d'utilisateur. Si vous voulez seulement enregistrer le mot de passe à la session aussi (ne pas le faire par erreur) vous devez l'utiliser. C'est le seul moyen de le faire. Voir le manuel;) Encore plus. Vous pouvez obtenir l'objet utilisateur et le passer à l'objet d'authentification si vous l'étendez;) –

Questions connexes