Symfony 4 : Gestion utilisateurs sans FOSUserBundle v2018 : Chapitre 3

Cet article est écrit en 3 parties :

Dans ce chapitre nous allons voir comment s’enregistrer et récupérer son mot de passe lors d’un oubli.

On va commencer par l’inscription mais ça va être très simple car on va se baser sur ce que l’on a déjà fait.

Nous allons d’abord ajouter une fonction register à notre controller Security :

Pour la vue nous allons simplement copier la page login.html.twig en register.html.twig, et faire quelques modifs (changement du titre, suppression des messages d’erreur, du csrf, du remember me, etc.. l’ideal serait évidemment d’utiliser un formType) ce qui nous donne au final :

On va aussi modifier le fichier de base.html.twig pour y ajouter un lien d’inscription quand l’utilisateur n’est pas loggué :

Ensuite nous allons compléter notre fonction register qui sera assez simple car ce sera tout simplement la création d’un objet User (Il faudrait aussi ici ajouter des contrôles) :

On va faire plus compliqué en ajoutant la fonction « Mot de passe oublié », on va déjà commencer par ajouter le lien sous le formulaire de login :

Et créer la route dans le fichier Security :

On va aussi tout de suite créer la page twig (security/forgotten_password.html.twig) qui sera relativement simple puisqu’elle ne contiendra qu’un formulaire qui permettra à l’utilisateur de saisir son adresse mail :

Ainsi que la vue pour saisir le nouvel email (security/reset_password.html.twig) :

La réinitialisation du mot de passe va se passer en 2 étapes :

  • L’envoi d’un mail avec un lien cliquable
  • La saisie du nouveau mot de passe

On va donc avoir besoin d’un token qui va permettre d’identifier l’utilisateur (à ajouter dans la classe User) :

Et modifier le controller Security qui va envoyer le mail et mettre à jour la zone resetToken, pour l’envoi de mail il va nous falloir ajouter swiftmailer :

  • composer require symfony/swiftmailer-bundle

Un controller qui va envoyer le mail :

Et enfin le controller qui va demander à l’utilisateur de saisir son nouveau mail :

C’est donc terminé pour cette série, à ce niveau vous devriez être capable de mettre un système de connexion utilisateur en place, et tout ça sans utiliser FOSUserBundle !

Vous pourrez retrouver le code de l’ensemble du projet sur github : https://github.com/gponty/userDemo2018

6 commentaires

  1. Merci beaucoup pour ce tutoriel très complet, vraiment très utile quand on se remet à Symfony, qu’on s’attaque à la version 4, et qu’on connaissait que FOSUserBundle ! (ça empêche pas que j’ai du me battre un petit peu, mais ça c’était obligé, vu que j’ai voulu modifier pas mal de trucs ahah, et puis ce serait pas drôle sinon !)

    Petite coquille dans ton twig ‘register.html.twig’, tu as ‘ for= »inputEmail » ‘ dans le label du nom !

    Ah, et lorsqu’on ajoute la route ‘register’ dans le Controller, il faut penser à ajouter

    use Symfony\Component\HttpFoundation\Request;
    use Symfony\Component\Security\Core\Encoder\UserPasswordEncoderInterface;
    use App\Entity\User;

    Encore merci, et bonne continuation ! Hâte de voir les prochains tutoriels de ce genre 😉

Laisser un commentaire

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

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.