25 - Symfony : Inscription d’un utilisateur
Objectifs
- ✅ Permettre à un utilisateur de créer un compte
- ✅ Accéder à sa fiche profil
Pré-requis
Avoir terminé la quête
Introduction
User stories 📋
In progress 🤸
en tant que visiteur, je souhaite avoir accès à un formulaire d'inscription afin de pouvoir me créer un compte
Doing 🏗️
mise en place du formulaire d'inscription
Done ✅
en tant que visiteur, je souhaite me connecter
création de l'entité User
création du formulaire de login
C’est bien beau tout ça, il est maintenant possible de se connecter et se déconnecter à ton application, mais ce que tu cherches avant tout, c’est trouver de nouveaux utilisateurs ! Et si ceux-ci ne peuvent pas se créer de compte, comment vas-tu conquérir ton public ?
Rendons ça possible dès maintenant !
Sommaire
Créer un compte utilisateur
Dans ce challenge, il est attendu qu’un nouvel utilisateur, en renseignant une adresse email et un mot de passe puisse avoir accès à notre application. Tu peux aller voir la document de Symfony à ce sujet How to Implement a Registration Form et tu peux voir qu’elle est assez expéditive, car en fait, tu sais déjà faire la majeure partie de ce qui est nécessaire.
Pour ce qui est de définir une classe User, tu l’as déjà fait dans une précédente quête.
En ce qui concerne la création d’un formulaire d’inscription, ce serait à ta portée dorénavant. Mais tu peux constater qu’il est écrit ”you can generate this with the make:registration-form”.
En effet, comme il existe une commande pour générer le formulaire de connexion, il existe également une commande pour générer le formulaire d’inscription. Celle-ci va générer :
-
Un controller :
App\Controller\RegistrationController -
Une classe de formulaire :
App\Form\RegistrationFormType -
Une vue :
templates/registration/register.html.twig
Ainsi si tu te rends sur la route /register tu accèdes à une page d’inscription, un peu minimaliste, mais du moins fonctionnelle !
Bravo ! Tu as fini la première partie !
[OPTIONNEL] Mot de passe oublié
Il est très souvent nécessaire d'avoir un lien "mot de passe oublié" disponible sous le formulaire de login, afin de permettre aux utilisateurs un peu tête en l'air de réinitialiser leur mot de passe. Attention, on parle bien ici de réinitialisation, il est impossible de renvoyer le mot de passe à un client puisque l'information est hachée en base de données. Un workflow classique est :
- l'utilisateur clique sur le lien "mot de passe oublié"
- un formulaire lui demande son adresse email (celle utilisée lors de la première inscription au site)
- un email est envoyé à cette adresse, contenant un lien (avec une durée de vie limitée).
- le lien renvoie vers un formulaire demandant de saisir le nouveau mot de passe. Tu le vois, une réinitialisation peut demander pas mal de travail. Heureusement, Symfony propose là encore d'automatiser grandement cette tâche (qui est assez répétitive puisque présente sur la plupart des sites), suis la documentation ci-dessous.
Symfony propose aussi une commande très pratique make:reset-password pour gérer la réinitialisation d'un mot de passe oublié !
💪 Challenge
Un peu de ménage !
Attention
Cette partie là va te demander de puiser dans tes connaissance que tu as acquises jusqu’à présent.
Alors oui, c’est super pratique tout ce qui se génère tout seul ! Mais on est d’accord que le code généré n’est pas non plus hyper propre !
Comme tu aimes les bonnes pratiques, et qu’à force tu es devenu un peu maniaque (ce qui arrive à des gens très très bien !) peut-être as-tu envie de réaménager tout ça. Par exemple en déplaçant la seule méthode register() de ton nouveau controller dans App\Controller\SecurityController. Écoute tes pulsions et fais-le ! Idem pour la vue : trouve lui un meilleur emplacement :)
Par contre, soit attentif aux chemins de fichiers qui changent et aux références qui pourraient ne plus être bonnes.
De plus, la vue générée est minimaliste en terme de style, prend donc un peu le temps pour rendre la page un peu plus jolie.
Critères de validation
- En testant l'application, il est implémenté :
- L’accès au formulaire d’inscription, en mode “déconnecté” uniquement, via un lien dans le menu “Se connecter”
- La création du compte via le formulaire, en saisissant les informations,
- L’affichage de la page d’accueil avec les dernières séries listées,
- L’accès à la page “Mon compte” via le menu du site en lieu et place de “Se connecter”,
- L’affichage de la page profil à l’url /my-profile.
- Sur le dépôt, il est apparait que :
- La méthode
register()est bien dansApp\Controller\SecurityController, - La vue
register.html.twigest bien danstemplates/security
- La méthode