Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Bonjour,
Tout d'abord je suis nouveau membre et heureux de faire partie de cette communauté.
Je débute depuis quelques mois sur ce fameux framework zend 2.
Après m'être exercé sur le "getting started" du site officiel, je me lance petit à petit dans le développement de mon propre projet.
Et là je commence à coincer sur le fameux module d'authentification (Zend\Auth)... j'ai parcouru ce forum, demandé à mon ami "google" mais je n'ai pas trouvé mon bonheur.
Voici ma question:
Comment utiliser ma session sur d'autres pages après avoir fait le processus d'authentification dans mon "controller" ?
Je m'explique, pour accéder à l'interface administration de mon site, je dois m'identifier au moyen d'un formulaire (username, password) .
Depuis mon controller, je vérifie si le formulaire est validé, récupère les champs puis vérifie s'ils sont valides. Si tout est ok, je passe au processus d'authentification. Une fois que l'authentification est correcte, je mets en session les infos de l'utilisateur connecté.
Le problème c'est comment je fais pour utiliser ensuite cette session sur d'autres pages ? par exemple afficher le nom et prénom de l'utilisateur dans le footer ?
Merci pour vos aides précieuses.
Hors ligne
Merci Seryus pour ton aide.
Malheureusement je n'ai pas compris et je trouve que la doc de ZF2 est très pauvre...
On a pas d'exemples concrets et je ne trouve aucune autre réponse. J'ai tellement regarder partout, tellement vu d'exemples que je suis maintenant complètement perdu...
A croire que je suis le seul à me soucier de cette session avec Zend\Auth... :(
Pouvez-vous me dire si mon exemple de code est bon ? ensuite m'expliquer à quoi sert new SessionStorage('auth_infos') et enfin que faire avec $identity ? puis-je le récupérer dans un autre contrôleur ?
[lang=php]if($form->isValid()){ $infos = $user->exchangeArray($form->getData()); /** mise en tableau des données **/ $infos = $form->getData(); $username = $infos['username']; $password = $infos['password']; // processus d'authentification avec mise en session $auth = new AuthenticationService(); $auth->setStorage(new SessionStorage('auth_infos')); $this->getAuth()->setIdentity($username) ->setCredential($password); $select = $this->getAuth()->getDbSelect(); $select->where('active = "true"'); $result = $auth->authenticate($this->getAuth()); if(!$result->isValid()){ foreach($result->getMessages() as $message) { echo $message; } } else{ $identity = $result->getIdentity(); } }
Merci pour vos aides.
Hors ligne
Ton code me fait dire que tu n'as même pas lu le getting started. Tu devrais revoir le tutoriel (peut être aussi le PHP) et regarder ce que font les fonctions que tu utilises (le code est expliqué ligne par ligne dans le getting started).
La doc de ZF2 sur l'authentification est loin d'être pauvre et c'est très bien expliqué.
Le nom de l'objet que tu instancies suffit à t'indiquer ce que c'est (et donc à quoi il sert).
Pour ta dernière question, je t'ai déjà donné la réponse dans mon premier poste.
Hors ligne
Si j'ai "même" lu le "getting started" et aussi le livre Zend framework 2 (industrialisez vos développements PHP).
Je posais juste des questions (car je m'en pose pas mal comme toi Seryus à tes débuts...) car je suis dans le doute.
Mais bon c'est pas grave, je trouverai ailleurs.
Merci quand même pour ton aide.
Hors ligne
Salut WikeC,
pour avoir faire une relecture du livre que tu as lu, tu devrais pouvoir t'en sortir avec même si tout n'est pas conforme aux conventions il répond déjà à pas mal de questions.
Là ton code montre effectivement que tu n'as pas bien compris comment fonctionne le ZF2 et principalement le service manager ainsi que les plugins. Tout simplement parce que tu n'utilises pas le service manager pour récupérer ton service d'authentification et il est évident que la variable $identity ne sera pas accessible ailleurs de ta fonction c'est la base du langage objet. Par contre il existe un plugin qui, si tu utilises tout correctement, te retourne l'utilisateur qui est stocké en session. Tu n'as quasiment rien à faire pour que ça fonctionne à part faire les tests sur l'authentification comme tu le fais. C'est tout.
Hors ligne
Moi ce sont surtout les 2ème et 3ème ligne qui me choquent, il ne peut pas affirmer qu'il a lu (ou même essayé de comprendre) et faire ça.
Si je me place du point de vue de quelqu'un qui connait le PHP (sans même avoir touché à Zend), tu récupères quelque chose dans ta variable $infos, puis tu écrases ce quelque chose sans jamais l'avoir utilisé.
Pour le plugin dont parle Orkin, tu peux voir comment le mettre en place et l'utiliser dans le lien que je t'ai passé plus haut.
Hors ligne
Merci Orkin pour ton éclaircissement du service manager. Tu m'as bien aidé ! Maintenant j'ai bien compris et mon souci de session est résolu. Effectivement j'avais mal saisi le fonctionnement de ZF2 mais ça commence à rentrer petit à petit (donnez moi un peu de temps c'est tout).
Quand à Seryus, j'ai rectifié mon erreur de la 2ème ligne (donc supprimé), en effet c'en était une belle c'est juste que j'avais fait plusieurs manipulations auparavant pour tester différentes choses et que j'avais "oublié" de tout remettre en ordre (j'étais surtout focalisé sur l'authentification... oui je sais on va me dire que c'est impardonnable, que c'est pas normal de faire ça, etc.) Bon bah c'est comme ça ! je le referais plus.
Me le signaler aurait plus approprié que de répondre assez froidement.
En espérant de ne pas t'avoir trop choqué.
Merci encore pour vos aides.
Hors ligne
Ca arrive les fautes d'étourderie . S'il fallait corriger toutes les erreurs de conceptions des codes du forum (le miens compris hein) on aurait encore résolu aucun problème
.
WikeC faut vraiment bien comprendre le fonctionnement du service manager, on devrait dire service locator d'ailleurs maintenant. Il est plus complexe qu'il n'y parait car il y a le service locator en lui même qui lui, une fois compris est assez facile à comprendre par contre il faut savoir qu'il existe des services locator spécialisés comme le formElementManager, le pluginManager etc ...
Hors ligne