Bonjour,
J'ai réalisé un script qui fonctionne bien mais je me demande s'il n'existe pas un moyen plus propre de réaliser ce que j'ai fait.
Mon application comporte :
- un controlleur d'authentification (controller Auth, actions login et logout)
- un formulaire de connexion
- un plugin qui me sert à gérer l'authentification et la gestion des droits
- une architecture MVC avec un layout qui affiche le formulaire de connexion
Il est donc possible de se connecter via /auth/login ou sur n'importe qu'elle page du site via le formulaire présent dans le layout.
Afin que l'utilisateur puisse se conecter depuis n'importe quelle page, j'ai crée un postDispatch dans mon plugin qui redirige vers auth/login.
Vu comme je surcommente mon code (je débute sous Zend), je pense que tout le monde aura compris que je récupère les données transmises puis les transmet à auth/login par méthode GET.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 public function postDispatch($request) // Fonction appellée après le controlleur (cf schéma du parcours d'une requête dans le framework) { // Sert à gérer le cas où l'utilisateur tente de se connecter par la zone de connexion présente sur toutes les pages : Récupère les données (par POST) et les transmet au controlleur Auth (action login) par GET if ($this->_request->isPost() AND $this->_request->getPost('id') == 'authHead') // Si un formulaire a été posté et que son id vaut authHead (ie si le formulaire de login présent sur toutes les pages a été rempli) { // Récupération des valeurs du formulaires $username = $this->_request->getPost('username'); $password = $this->_request->getPost('password'); $redirector = Zend_Controller_Action_HelperBroker::getStaticHelper('redirector'); // Appel à l'aide de vue redirector (nécessaire pour faire une redirection depuis un plugin, d'autres méthodes peuvent être utilisées pour des redirections depuis un controlleur) $redirector->gotoUrl('/auth/login/isPost/yes/username/' . $username . '/password/' . $password) // On redirige vers la page de login en passant le nom d'utilisateur et le mot de passe par méthode GET ainsi qu'un paramète qui servira à dire au controlleur Auth que le formulaire a été rempli ->redirectAndExit(); } }
J'ai du adapté mon plugin pour qu'il prenne en compte le cas d'une connexion qui ne passerait pas directement par auth/login car il utilisait isPost pour savoir si le formulaire avait été rempli. Je pense que c'est cette partie de mon code qui n'est pas très propre : je passe en paramètre un argument isPost qui vaut yes que j'exploite ensuite dans auth/login comme ceci :
Je me demande donc s'il n'existe pas une meilleure façon de gérer les formulaires redirigés.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 $isPost = $this->_request->getParam('isPost'); if ($this->_request->isPost() OR $isPost == 'yes') // Si le formulaire a été rempli (méthode POST s'il est rempli depuis la page d'authentification et isPost = 'yes' s'il est rempli depuis la zone d'authentification présente sur chaque page) { // Récupération des valeurs if($isPost == 'yes') // Variables passées par GET si les données viennent du formulaire head (récupérées dans le dispatch du pluginAuth et passée par GET) { $username = $this->_request->getParam('username'); $password = $this->_request->getParam('password'); } else // Variables passées par POST si les données proviennent du formulaire de la page d'authentification classique { $username = $this->_request->getPost('username'); $password = $this->_request->getPost('password'); } ... }
Utiliser les sessions ? Elles servent justement dans ce genre de cas normalement...
Transmettre mes arguments à auth/login en POST et non pas en GET ? Je n'ai rien trouvé à ce sujet.
Merci à vous.
Partager