Gérer des utilisateurs sans FosUserBundle 5ème partie

Nous voici arrivés à la dernière partie de ce tutoriel qui nous aura permis de voir pas mal de choses: des listeners, des formsEvents, des validateurs personnalités, la mise en place de handler, le découplage du code…

Le reset de mot de passe

Nous en étions restés au fait que nous envoyions un mail à l’utilisateur après avoir vérifié qu’il existait bien en base. Mais à présent, il faut mettre en place ce contrôleur, son handler, formType & son entité, et le template. C’est parti!

 L’entité ResetPassword

Comme d’habitude, nous démarrons par l’entité:

Très classique, elle ne se compose que d’un champ qui sera un nouveau password à écrire deux fois.

Le ResetPasswordType

Alors, ici, je prends des précautions. En effet, je dois vérifier que ce token est présent, mais aussi qu’il est valide en regardant du côté du repository si un user correspond bien à ce confirmationToken. Et cela, avant même de soumettre le formulaire (d’où l’event PRE_SET_DATA), quand j’arrive directement sur la page après avoir cliqué sur le lien du mail. Je lance donc diverses exceptions que j’attraperai au niveau du contrôleur.

Idem que d’habitude, ce formType ayant des dépendances, il devient un service:

Ici, j’ai rajouté scope= »request » car lorsque nous passons une request en dépendance dans Symfony2, il nous lance une erreur dont vous trouverez l’explication ici: http://symfony.com/fr/doc/current/cookbook/service_container/scopes.html#configurer-le-champ-d-application-dans-la-definition

Mise à jour du UserManager

Le ResetPasswordFormHandler

Comme d’habitude, un petit handler pour traiter la requête, le formulaire, et exécuter si besoin est des actions par des dépendances:

Si le formulaire est valide (et je m’en suis assuré dans le formType), alors je sais que j’ai bien un token et qu’il y a bien un user qui y est associé. Je peux donc faire appel au UserManager pour mettre à jour deux champs et changer le mot de passe en base avec la fonction updateCredentials.

Mise à jour du UserManager

Je lui rajoute donc ma fonction clearConfirmationToken($user):

Mais je ne flush pas car cela sera fait dans updateCredentials appelé juste après.

Mise à jour du fichier services.xml

 

Le ResetPasswordController

Il ne nous reste plus grand chose à faire. Le contrôleur va être important car il va catcher les erreurs que nous avons lancées dans le formType:

 

Le template

 

Pour finir, j’ai créé des partials pour les messages flashes que j’ai placés au niveau des templates login, dashboard et homepage:

 

Le code github se trouve ici: https://github.com/jpsymfony/authentication-demo

Rédigé par

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *