2012-04-05 2 views
0

J'ai une classe représentant mon identité qui contient quelques informations. Voici la version courte.zend_auth identité sur le sillage

class Auth_User { 

    private $id; 
    private $current_role; 

    public function __construct($id, $current_role) { 
     $this->id = (int) $id; 
     $this->current_role = (string) $current_role; 
    } 

    public function __wakeup() { 
     if (/*$current_role is not valid*/) { 
      /*clear identity and redirect to login*/ 
     { 
    } 
} 

Ma question comment puis-je effacer en toute sécurité l'identité et rediriger pour se connecter dans la méthode de réveil? Si je fais ce qui suit, il semble fonctionner dans une boucle infinie.

Zend_Auth::getInstance()->clearIdentity(); 
$this->_helper->redirector('index', 'index'); 
+0

Eh bien, il devrait faire l'affaire, pourriez-vous donner un peu plus de détails pour que quelqu'un pourrait vous donner une meilleure solution. –

+0

Je pense que le problème est quand j'appelle Zend_Auth :: getInsance() -> clearIdentity(); il appelle encore et encore la fonction __wakeup. Donc, sa récursion infinie. – Jeremiah

Répondre

0

le fait que vous avez une méthode __wakeup() implique que vous avez une méthode __sleep().

Ce que j'essaierais probablement de faire dans cette situation, serait de définir une expiration sur Zend_Session_Namespace('Zend_Auth') dans la méthode __sleep().

Ensuite, testez __isset() par rapport à l'espace de noms de la méthode __wakeup(). Je pense que cette approche pourrait fonctionner.

Si vous voulez juste pour effacer l'identité à __sleep() qui pourrait être une bonne idée aussi bien et puis juste rediriger vers login() sur __wakeup().

Espoir Je ne suis pas tout à fait dans le champ gauche ...