Comment faire preDispatch le transfert dans le Zend Framework?
Je veux utiliser _forward()
dans preDispatch
après vérification si l'utilisateur est connecté dans chaque contrôleur.
Le scénario est assez simple: Si l'utilisateur n'est pas connecté, il devrait être transféré à loginAction
soit dans le même contrôleur ou d'un autre contrôleur.
Ce serait provoquer une boucle infinie, que l'envoi, le processus recommence encore une fois, l'appel de preDispatch
à nouveau et le transfert serait de commencer tout de nouveau.
La seule solution que j'ai été en mesure de venir avec a été de vérifier si les loginAction
est déjà défini dans la demande.
Donc ma question est, comment le sophistiqué développeur de gérer ce problème?
Mise à JOUR
Juste après avoir cliquer sur le bouton envoyer, le fantôme de la saint-prise de conscience est venu à travers 😉
Une autre idée serait de construire un LoginController
pour gérer la demande de connexion. Ou est-il une meilleure façon de le faire?
OriginalL'auteur PvB | 2010-02-19
Vous devez vous connecter pour publier un commentaire.
- Je utiliser une combinaison d'un Zend_Controller_Plugin et une action authcontroller pour protéger mes sites. Il supporte les réinitialisations de mot de passe, forcé modifications de mot de passe, et automatique de verrouillage de compte, d'où la complexité moyenne.
Noter que j'utilise Doctrine, si de toute évidence, cela ne peut pas être copié et collé dans votre application, mais il devrait fonctionner avec un minimum de modifications. J'ai enlevé quelques méthodes spécifiques à ma demande, mais l'authentification foo est là.
Plugin
L'action authcontroller
Excellent travail, $this->_redirect(); n'a pas fonctionné fonctionne uniquement le vôtre.
OriginalL'auteur hobodave
Alternativement, vous pouvez utiliser les éléments suivants:
Dans votre controller, puis [avant] ce
Effectivement sauter le predispatch boucle qui semble bien fonctionner.
OriginalL'auteur ukuser
Ce processus pourrait être dans n'importe quelle action, mais pourquoi ne pas loginAction, ou indexAction dans LoginController?
Edit: peut-être trop fatigué pour réaliser le vrai problème. J'avais commencer avec quelque chose comme un protected/private membre dans chaque connexion protégée contrôleur, comme
protected $authNeeded = true;
, et de vérifier dansZend_Controller_Action::init()
. Cela pourrait conduire à une répétition de code, donc, une autre option serait de simplement exécuter ce code dansAuthNeededController
qui tous de connexion protégé contrôleur s'étend.OriginalL'auteur chelmertz