Ajouter la confirmation de l’email
Laravel est un framework très complet mais à mon goût il lui manque quelque chose de très utile : la confirmation de l’email lors d’une inscription. Personnellement je l’ajoute systématiquement et j’ai l’impression que je ne suis pas le seul. Alors plutôt que d’écrire toujours les mêmes choses je me suis mis en quête d’un package pratique pour me faciliter la tâche mais je n’ai pas trouvé quelque chose de satisfaisant.
Alors je me suis remonté les manches pour en faire un qui me semble apporter toutes les fonctionnalités requises et qui est suffisamment souple pour s’adapter à toutes les situations (du moins j’espère). Je l’ai fait pour la version 5.4 parce que je suppose que tous les nouveaux projets seront fondés sur cette nouvelle version.
L’installation
Le package est sur Github :
La procédure d’installation est détaillée sur la page du projet.
Il y a deux situations :
- un projet tout neuf avec utilisation de php artisan make:auth. Dans ce cas l’installation est très facile.
- un projet existant avec des vues de login et de registration personnalisées. Dans ce cas il faut ajouter du code aux deux vues pour avoir les alertes de la confirmation.
Dans cet article je vais partir de la première hypothèse.
L’inscription (register)
Avec la création automatique des vues de Laravel on a ce formulaire d’inscription :
Lorsqu’un utilisateur s’inscrit :
Classiquement il est automatiquement connecté. Mais avec la confirmation on lui envoie un email :
Et on lui affiche une alerte :
Le blocage
Le login
Maintenant tant que la confirmation n’a pas eu lieu on bloque le login :
Le package possède la version française des messages :
Dans le message on propose d’envoyer à nouveau l’email de confirmation.
Le renouvellement du mot de passe
Il faut aussi bloquer la connexion automatique après un renouvellement du mot de passe. C’est fait automatiquement par le package.
La confirmation
Quand l’utilisateur utilise le lien de confirmation de l’email il se retrouve sur la page de connexion avec un message :
Et maintenant il peut se connecter !
Sous le capot
La migration
Le package comprte une migration pour ajouter deux colonnes à la table users :
La colonne confirmed nous indique que l’utilisateur est confirmé et l’autre colonne contient le code de confirmation ou NULL si la confirmation a eu lieu.
Les routes
Le package ajoute deux routes :
- confirmation/{id}/{token} : pour la confirmation avec l’id de l’utilisateur et un code
- confirmation/resend : pour le renvoi de l’email de confirmation
Les contrôleurs
J’ai pris le parti de faire les interventions minimales sur les contrôleurs en me contentant de substituer le trait de Laravel. Par exemple pour le contrôleur LoginController on doit juste mettre la référence du trait du package au lieu de celui d’origine :
use Bestmomo\LaravelEmailConfirmation\Traits\AuthenticatesUsers;
Et c’est tout !
Artisan
Le package ajoute deux commandes artisan :
- php artisan confirmation:auth : pour surcharger les vues login et register d’origine et leur ajouter les alertes.
- php artisan confirmation:notification : si on veut modifier la notification alors cette commande en fait une copie dans l’application et c’est cette copie qui sera utilisée par le package.
Les traductions
Les fichiers de langue sont dans le package, par défaut en anglais et en français. Si on veut effectuer des changements alors il est prévu la publication de ces fichiers :
php artisan vendor:publish --tag=confirmation:translations
Conclusion
Je pense avoir réalisé un outil pratique et complet, du moins pour mes besoins personnels ! Je suis à l’écoute pour toute remarque concernant ce projet.
6 commentaires
vishal
I have used the package and it is working fine. I get email on register when clicks on code in the email the account gets activated.
Now i want to disable the process for sometime. I want to user to activate account on register.
sousou22
Bonjour,
SVP qu’est ce qu’on peut mettre dans la fonction resend dans RegisterController, use Bestmomo\LaravelEmailConfirmation\Traits\ResetsPasswords; n’est pas reconnu
merci.
bestmomo
Bonjour,
Est-ce que le package est bien installé ?
sousou22
oui il est bien installé
zero-tech
Bonjour pouvez-vous m’aider concernant cette erreur :
« Trait ‘App\Http\Controllers\Auth\Bestmomo\LaravelEmailConfirmation\Traits\AuthenticatesUsers’ not found »
bestmomo
Salut,
Tu as bien mis :
use Bestmomo\LaravelEmailConfirmation\Traits\AuthenticatesUsers;
dans LoginController ?