Précédent   Forum des professionnels en informatique > PHP > Outils > Zend > Zend Framework > Zend_Acl & Zend_Auth
Zend_Acl & Zend_Auth Forum d'entraide pour les composants Zend_Acl & Zend_Auth du Zend Framework (contrôle d'accès, gestion des droits, authentification, etc.). Avant de poster -> Cours Zend_Acl et Zend_Auth.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 11/11/2007, 11h33   #1
Membre du Club
 
Inscription : avril 2003
Messages : 139
Détails du profil
Informations personnelles :
Âge : 35

Informations forums :
Inscription : avril 2003
Messages : 139
Points : 61
Points : 61
Envoyer un message via MSN à nighma Envoyer un message via Skype™ à nighma
Par défaut Zend_Auth et Cookie Remember me

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
__________________
Sébastien Bervoets
nighma est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/11/2007, 20h03   #2
Membre Expert
 
Avatar de Janitrix
 
Inscription : octobre 2005
Messages : 3 398
Détails du profil
Informations forums :
Inscription : octobre 2005
Messages : 3 398
Points : 2 331
Points : 2 331
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.
Janitrix est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/11/2007, 23h16   #3
Membre du Club
 
Inscription : avril 2003
Messages : 139
Détails du profil
Informations personnelles :
Âge : 35

Informations forums :
Inscription : avril 2003
Messages : 139
Points : 61
Points : 61
Envoyer un message via MSN à nighma Envoyer un message via Skype™ à nighma
Alors voilà, par rapport au tutorial et à différentes lectures cette après-midi, j'ai trouvé ceci :

Dans le fichier login.phtml :
Code :
	<input type="checkbox" name="rememberme" value="remember">Se souvenir de moi</input>
Dans le fichier AuthController.php (fonction loginAction) en dessous de
Code :
1
2
      $username = $f->filter($this->_request->getPost('username'));
      $password = $f->filter($this->_request->getPost('password'));
j'ajoute
Code :
      $rememberme = $f->filter($this->_request->getPost('rememberme'));
et ensuite en dessous de
Code :
1
2
          $data = $authAdapter->getResultRowObject(null, 'password');
          $auth->getStorage()->write($data);
j'ajoute
Code :
1
2
3
          if ($rememberme == 'remember') {
          	Zend_Session::rememberMe();
          }
(2 semaines par défaut)

Et dans la fonction logoutAction
Code :
    Zend_Session::forgetMe();
et cela semble fonctionner pas mal.

J'ai entendu dire que cela ne fonctionne plus le lendemain. Je vérifierai...
__________________
Sébastien Bervoets
nighma est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/12/2007, 16h59   #4
Futur Membre du Club
 
Inscription : octobre 2007
Messages : 13
Détails du profil
Informations personnelles :
Localisation : France, Haute Savoie (Rhône Alpes)

Informations forums :
Inscription : octobre 2007
Messages : 13
Points : 16
Points : 16
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();
__2mx est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 04h53.


 
 
 
 
Partenaires

Hébergement Web