Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Pages: 1
Bonjour,
je découvre le composant Zend_Auth et tente de l'incorporer à mon squelette d'appli.
J'utilise une identification par une bdd et un formulaire basique.
L'identification est fonctionnelle.
En revanche, je souhaiterais empêcher l'accès au site tant que l'utilisateur n'est pas identifié.
J'ai pour cela créé ma propre fonction preDispatch() dans laquelle si l'utilisateur n'a pas d'identité
j'éxécute une redirection vers mon formulaire d'identification : voir le code ci-dessous
public function preDispatch() { $auth = Zend_Auth::getInstance(); if (!$auth->hasIdentity() and $actionName='Index') { $this->_redirect('auth/login'); } }
En théorie, ça devrait fonctionner mais je tombe sur un message d'erreur : boucle de redirection!
C'est probablement le découpage de mon site qui ne convient pas à une telle structure.
Dans mon contrôleur 'Index', j'ai trois actions 'header', 'footer' et 'nav' qui sont appelées dans mon layout,
et mon formulaire d'identification utilise le même layout qui est unique pour l'ensemble du site.
Comment ne pas rediriger les requêtes faîtes à ces actions ?
Par avance merci de votre aide ;-)
PS : Le sujet est limite entre layout et auth, n'hésitez pas à le déplacer si vous jugez qu'il est au mauvais endroit.
Dernière modification par deviltaz (10-09-2008 15:35:27)
Hors ligne
donc, ce sont tes fonctions header/footer et nav qui boucle ? c'est ca ?
Il y a pleins de solutions a vrai dire.
La plus 'gore' :
Tu test dans ton predispatch le valeur de $this->_request->getActionName() et adope ton comportement
La plus en vouge:
Utilise un Plugin en Predispatch qui change l'action à faire si il la personne n'est pas identifié
Hors ligne
Hello,
1. S'il n'est pas connecté, il ne faut pas que tu l'empêche d'accéder à la page de connexion !
2. Pourquoi attendre preDispatch ?
public function dispatchLoopStartup (Zend_Controller_Request_Abstract $requete) { $auth = Zend_Auth::getInstance(); // Notes le == if (!$auth->hasIdentity() && !($requete->getControllerName() == 'auth' && $requete->getActionName()=='login' && $requete->getModuleName() == 'default') { // On modifie la requête sans faire de redirection. $requete->setControllerName('auth') ->setActionName('login') ->setModuleName('default') ->setDispatched(false); } }
A+
Dernière modification par mikaelkael (10-09-2008 14:22:00)
Hors ligne
mikaelkael a écrit:
Hello,
1. S'il n'est pas connecté, il ne faut pas que tu l'empêche d'accéder à la page de connexion !
2. Pourquoi attendre preDispatch ?
Parce que en ce moment, je ne dit que des betises !
J'utilise moi-meme dispatchLoopStartup dans mes codes
preDispatch est un mot à la mode qu'on voit partout
Hors ligne
En effet, ce sont bien mes fonctions header, footer et nav qui provoquent la boucle.
La plus en vouge:
Utilise un Plugin en Predispatch qui change l'action à faire si il la personne n'est pas identifié
Grand débutant avec ZF la notion de plugin ne m'est pas familière, je vais éplucher la doc à ce sujet.
2. Pourquoi attendre preDispatch ?
Là encore, je découvre le fonctionnement de ZF et m'inspire pour l'instant des infos glanées dans divers tutos.
C'est dans le preDispatch que Rob Allen se sort d'une situation ressemblante dans l'un de ces guides, voila pourquoi.
dispatchLoopStartup interviendrait donc avant l'action du preDispatch ?
Quoi qu'il en soit, à quel niveau surcharger cette fonction afin d'éviter de se répéter ?
Merci de ces précisions ;-)
Hors ligne
C'est juste avant d'après le beau diagramme de séquence de Philippe (merci) :
http://www.kitpages.fr/cms/site/tutoria … lobale.jpg
Et la doc raconte, http://framework.zend.com/manual/fr/zen … ugins.html :
# dispatchLoopStartup() est appelée juste avant que Zend_Controller_Front n'entre en boucle de dispatching.
# preDispatch() est appelée avant qu'une action ne soit dispatchée par le dispatcheur. Cette méthode permet un filtrage ou un proxy. En jouant sur la requête à ce niveau là, vous êtes capable de changer le processus, et en vous aidant de Zend_Controller_Request_Abstract::setDispatched(false)), vous supprimez l'ordre de dispatching de celle-ci.
Amen
Hors ligne
Un grand merci à vous.
J'en apprend énormément grâce à vous, petit à petit le voile se lève sur le ZF
et je commence à mieux appréhender la puissance de la bête ;-)
Hors ligne
Hello
nORKy, 1. et 2. ne correspondait pas aux messages mais à ma réflexion.
Nos messages se sont croisés .
A+
Hors ligne
Pages: 1