Bonjour à tous,
J'ai suivi le tutorial de Rob Allen traduit sur ce site et j'aimerais ajouter une fonctionnalité "Remember me" au formulaire de login.
Quelqu'un peut-il m'aider ?
Merci
Version imprimable
Bonjour à tous,
J'ai suivi le tutorial de Rob Allen traduit sur ce site et j'aimerais ajouter une fonctionnalité "Remember me" au formulaire de login.
Quelqu'un peut-il m'aider ?
Merci
J'ai fait une telle fonctionnalité pour mon site. Je ne suis pas sûr que ma manière de faire soit très élégante mais bon, elle est fonctionnelle.
J'ai crée une classe CookieManager, avec des fonctions statiques "addCookie", "getCookie", "hasCookie" et "removeCookies" pour gérer les cookies. Ensuite, dans une classe SessionManager, j'ai fait une fonction statique loadSession qui, s'il n'y a pas de session chargée actuellement dans Zend_Auth, vérifie la présence de Cookie, et le cas échéant, récupère les informations de ce cookie et charger un Zend_Auth.
J'appelle cette fonction dans chaque controller, dans la fonction init. Ce côté répétitif me gène un peu mais je n'ai rien trouvé de mieux, en plus du fait que je n'ai pas vérifié si le Zend Framework ne proposait pas cette fonctionnalité directement dans Zend_Auth.
Quoi qu'il en soit, c'est une solution intermédiaire simple et qui marche très bien.
Si tu as besoin de plus de précision sur les classes et fonctions, tu n'as qu'à demander ;)
Bonne chance.
Alors voilà, par rapport au tutorial et à différentes lectures cette après-midi, j'ai trouvé ceci :
Dans le fichier login.phtml :
Dans le fichier AuthController.php (fonction loginAction) en dessous deCode:<input type="checkbox" name="rememberme" value="remember">Se souvenir de moi</input>
j'ajouteCode:
1
2 $username = $f->filter($this->_request->getPost('username')); $password = $f->filter($this->_request->getPost('password'));
et ensuite en dessous deCode:$rememberme = $f->filter($this->_request->getPost('rememberme'));
j'ajouteCode:
1
2 $data = $authAdapter->getResultRowObject(null, 'password'); $auth->getStorage()->write($data);
(2 semaines par défaut)Code:
1
2
3 if ($rememberme == 'remember') { Zend_Session::rememberMe(); }
Et dans la fonction logoutActionet cela semble fonctionner pas mal.Code:Zend_Session::forgetMe();
J'ai entendu dire que cela ne fonctionne plus le lendemain. Je vérifierai...
Cette technique fonction à condition que Zend_Session::start() soit appelé après Zend_Session::rememberMe().
Ce qui devient problématique si Zend_Session::start() est appelé au départ dans le bootstrap.
Un moyen de contourner le problème est de se servir d'un cookie pour signaler au bootstrap d'appeler Zend_Session::rememberMe();
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 // Dans AuthController // cookie pour notifier au bootstrap l'appel de Zend_Session::remeberMe() if($this->_form->rememberme){ setcookie("Zend_Auth_RememberMe", 1209600, time()+6000, '/'); }else{ setcookie("Zend_Auth_RememberMe", 0, time()+6000, '/'); } // Dans le bootstrap if(isset($_COOKIE["Zend_Auth_RememberMe"])){ Zend_Session::rememberUntil($_COOKIE["Zend_Auth_RememberMe"]); unset($_COOKIE["Zend_Auth_RememberMe"]); } Zend_Session::start();