Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 19-11-2012 23:11:51

matthieupetit
Membre
Date d'inscription: 05-11-2012
Messages: 20

Authentification

Bonjour,

j'ai construit un module sur la base du tutoriel de la documentation officielle de ZF2 avec uniquement un contrôleur et une action "indexAction" renvoyant sur une vue n'ayant qu'une balise "h1".

J'essai de me faire ma première expérience sur un framework et je souhaite pour débuter créer un simple formulaire de connexion qui donnerait vers une page web avec un bouton de déconnexion.

J'y arrive très facilement avec un framework maison et j'ai l'impression que ZF2 me prend beaucoup plus de temps.

Quelqu'un pourrait m'expliquer en détail comment doit-je faire ? (fichier à créer, logique à suivre, composants à utiliser...)

J'ai lu une bonne partie du livre de Vincent Blanchon mais sa reste toujours trop abstrait pour moi.

Merci par avance.

Hors ligne

 

#2 20-11-2012 09:20:55

J0r
Membre
Date d'inscription: 27-04-2012
Messages: 57

Hors ligne

 

#3 20-11-2012 14:02:48

Orkin
Administrateur
Lieu: Paris
Date d'inscription: 09-12-2011
Messages: 1261

Re: Authentification

Salut, ce tutoriel est trop vieux et ne fonctionnera pas (en rouge beta4) et ça ne parle pas du tout de la partie authentification.

Tu dois créer un formulaire (pour ça tu as des exemples sur la documentation officielle sur le site du zendframework), ensuite tu dois configurer le service d'authentification http://framework.zend.com/manual/2.0/en … ntication.

Tout est expliqué sur la doc. Si tu utilises doctrine c'est un petit peu différent.

Hors ligne

 

#4 20-11-2012 23:40:50

matthieupetit
Membre
Date d'inscription: 05-11-2012
Messages: 20

Re: Authentification

Voilà j'ai terminer le formulaire mais je ne comprends pas du tout la suite. J'ai lu la doc, je rappel que c'est ma première expérience sur framework et j'avoue que je désespère complètement car je passe un temps fou et n'avance pas et bien pire que sa je ne trouve absolument aucun avantage à utiliser ce framework.

J'espère que ça va changer par la suite mais pourriez vous m'expliquez très précisément comment faire.

J'ai créer un formulaire (qui me donne un rendu crado avec les label posés n'importe ou) et dans mon contrôler je l'ai instances puis fait un écho du formulaire dans la vue. Mais maintenant comment d'authentifier ?

Hors ligne

 

#5 21-11-2012 00:21:09

Orkin
Administrateur
Lieu: Paris
Date d'inscription: 09-12-2011
Messages: 1261

Re: Authentification

Et bien maintenant tu dois faire appel au service d'authentification et tout est expliqué ici avec des exemples : http://framework.zend.com/manual/2.0/en … intro.html

Concernant la sensation de ne pas avancer j'avais vu une courbe qui expliquait que la courbe de progression/d'apprentissage ne faisait que monter de façon régulière mais que la sensation d'avancer avait des paliers où l'on stagne ce qui donne cette impression de ne pas avancer alors que c'est le cas, donc ne te décourage pas ! Le framework apporte notamment tout une gestion du MVC donc ce que tu utilises sans vraiment le voir (contrôleur et vue) donc rien que tout ça tu n'as pas à le coder.
Les formulaires par exemple il va valider tout seul (ou en quelques lignes) un formulaire de plusieurs éléments etc ... smile

Hors ligne

 

#6 21-11-2012 00:23:17

matthieupetit
Membre
Date d'inscription: 05-11-2012
Messages: 20

Re: Authentification

Mais j'ai lu ce tutoriel et je ne vois pas ou créer les fichier etc...

Merci tout de même pour ta réponse smile

Hors ligne

 

#7 21-11-2012 10:46:41

Orkin
Administrateur
Lieu: Paris
Date d'inscription: 09-12-2011
Messages: 1261

Re: Authentification

Voici un exemple de code je sais pas si ça pourra plus t'aider :

UserController

Code:

[lang=php]
// Cette méthode permet d'afficher la page pour se connecter et de traiter la soumission du formulaire
public function loginAction()
    {
        // Tu peux éventuellement tester avant si l'utilisateur est pas déjà authentifier pour éviter les petits malin qui veulent lancer plein de connexion (ça sert à rien pour eux mais ça peut charger le serveur inutilement)
        // Je récupère la requête
        $request = $this->getRequest();
        // On récupère le formulaire de login, j'ai une factory dans mon module qui va m'instancier le formulaire avec le bon input filter. Normalement il n'y a pas besoin de factory si tu utilises les formulaires comme dans la documentation, c'est une partie que j'ai fait il y a longtemps et qui est mal faite. Donc suffit juste de récupérer le formulaire via le service manager avec invokables
        $form = $this->getLoginForm();
        // On regarde si c'est une requête post, si ce n'est pas le cas c'est que l'utilisateur arrive sur la page pour avoir le formulaire, on transmet donc le formulaire à la vue
        if (!$request->isPost()) {
            return new ViewModel(array('form' => $form));
        }

        // Là on est en post donc on fait le traitement pour vérifier que le formulaire a bien été rempli, on lui transmet d'abord les informations soumises en post
        $form->setData($request->getPost());

        // On vérifie si c'est valide par rapport aux critères (inputFilter)
        if (!$form->isValid()) {
            // Traitement dans le cas où ce n'est pas valide (les champs mal saisie en gros)
        }

        // J'utilise le plugin forward() pour lancer l'authentification. Ce n'est pas obligé mais je trouvais ça plus propre d'avoir la partie liée à l'authentification dans une méthode différente. Je n'ai biensur pas créé de route pour y accéder comme ça seul l'application via forward() peut lancer d'authentification (sécurité)
        return $this->forward()->dispatch('Application\Controller\User', array('action' => 'authenticate'));
    }

Toujours dans UserController

Code:

[lang=php]
public function authenticateAction()
    {
        // Pareil il est possible de tester si l'utilisateur n'est pas déjà connecté, on sait jamais. En principe c'est inutile si ça arrive c'est que le dev a merdé.
        // On récupère la requête
        $request = $this->getRequest();

        // Là on récupère le service d'authentification en passant par le service manager, j'ai pas lu toute la doc mais eux ils l'instancient directement ici sur la page que j'ai lu donc tu peux faire pareil
        // On rempli l'adapter etc ...
        $auth = $this->getAuthenticationService();
        $adapter = $auth->getAdapter();
        $adapter->setIdentityValue($request->getPost()->get('login'))
            ->setCredentialValue($request->getPost()->get('password'));

        // On lance l'authentification et on stock le résultat. Ici j'ai un doute, avec doctrine il va récupérer l'utilisateur seulement avec le login donc "identityValue" et il est possible de déclencher juste après la requête une fonction "credential_callable" qui continent l'objet membre retourné et le mot de passe saisi par l'utilisateur. Il faut donc faire un test du genre return $user->getPassword() === sha1($passwordGiven); en fonction de la façon dont c'est crypté.
        $authResult = $auth->authenticate();

        // Si c'est incorrect, c'est qu'il y a une erreur
        if (!$authResult->isValid()) {
            // Traitement en cas d'erreur
        }

        // Ici ça retourne l'objet membre
        $user = $authResult->getIdentity();

        // On écrit le membre dans la session, alors là pareil je me souviens plus ce que j'ai fait normalement il faut stocker que l'id parce que stocker le membre c'est super gourmand. Sauf que doctrine le fait pour toi. Il y a des infos ici https://github.com/doctrine/DoctrineModule/blob/master/docs/authentication.md d'ailleurs ça me fait penser que j'ai des choses à revoir car c'est fait automatiquement par doctrine :p
        $auth->getStorage()->write($user);

        return $this->redirect()->toRoute('maroute');
    }

Hors ligne

 

#8 21-11-2012 12:55:33

J0r
Membre
Date d'inscription: 27-04-2012
Messages: 57

Re: Authentification

Les tutoriels officielles de ZF sont assez complexe surtout si on n'a jamais utilisé le produit, c'est pour ça que je mettais un lien vers un tuto pour comprendre le mécanisme de ZF.

Hors ligne

 

#9 21-11-2012 12:57:59

matthieupetit
Membre
Date d'inscription: 05-11-2012
Messages: 20

Re: Authentification

Merci beaucoup pour ta réponse j'ai donc créer une loginAction et une action authenticate en reprenant le code que tu m'a donné et en l'adaptant mais rien n'y fait j'ai une erreur, enfin bref je crois que je vais arrêter avec ZF2 sa me fait perdre énormément de temps et c'est impossible de l'apprendre sans connaissances sur framework.

Hors ligne

 

#10 21-11-2012 13:02:00

J0r
Membre
Date d'inscription: 27-04-2012
Messages: 57

Re: Authentification

Avant de t'attaquer à l'authentification d'un utilisateur, commence par faire une page simple avec un formulaire, regardes comment on récupère les données, comment on les affiche et après, penches toi sur l'authentification, c'est pas plus compliqué qu'un autre framework.

Hors ligne

 

#11 21-11-2012 13:04:12

matthieupetit
Membre
Date d'inscription: 05-11-2012
Messages: 20

Re: Authentification

la création du formulaire oui j'y arrives mais voila je comprends pas bien la logique et je ne vois pas ou je dois récupérer les données etc.. mais surtout je ne sais pas ou apprendre de A à Z.

Hors ligne

 

#12 21-11-2012 13:16:18

J0r
Membre
Date d'inscription: 27-04-2012
Messages: 57

Re: Authentification

Dans le lien que j'ai donné, même si il n'est plus à jour, il t'explique comment faire une page simple avec Ajout / Modification / Suppression de données, après une fois que tu auras les bases, tu comprendras mieux les tutoriels du site ZF²

Hors ligne

 

#13 21-11-2012 14:17:06

Orkin
Administrateur
Lieu: Paris
Date d'inscription: 09-12-2011
Messages: 1261

Re: Authentification

Tu as raison J0r ça permet d'avoir une idée mais ce tutoriel existe sur la documentation officielle du ZF2 et elle est à jour certes pas en français mais il y a des choses incorrecte comme la façon de déclarer le contrôleur dans le module.config.php et il y en a surement d'autre j'ai pas tout vérifié mais entre la beta4 et la béta6 il y a pas mal de choses qui ont été cassées !

Hors ligne

 

Pied de page des forums

Propulsé par PunBB
© Copyright 2002–2005 Rickard Andersson
Traduction par punbb.fr

Graphisme réalisé par l'agence Rodolphe Eveilleau
Développement par Kitpages