Email

Créer l’authentification des emails dans Laravel 11 avec Mailgun et Digital Ocean

Intégrez la version 11.x de Laravel à Mailgun pour ajouter la capacité de vérifier les emails des utilisateurs. Poursuivez votre lecture pour découvrir notre guide étape par étape.
Image pour Créer l’authentification des emails dans Laravel 11 avec Mailgun et Digital Ocean

Lors de sa sortie, la version 5.7 de Laravel a ajouté une nouvelle capacité de vérification des emails des utilisateurs. Si vous avez déjà exécuté php artisan make:auth dans une application Laravel, vous connaissez ce sentiment de plaisir et d’enthousiasme en voyant toutes vos pages d’inscription et de connexion, avec le hachage des mots de passe et une table des utilisateurs déjà configurés.

Cet enthousiasme retombe vite après le déploiement en production, lorsque vous découvrez que n’importe qui peut s’inscrire avec garbage@notrealemail.com ou tout ce qu’il a envie de saisir. Cette fine couche d’authentification de session n’est pas d’une grande aide dans une application en production. L’introduction de l’interface MustVerifyEmailinterface dans Laravel 5.7 s’est ajoutée à la structure d’authentification afin que les utilisateurs doivent utiliser une adresse email réelle et valide pour se connecter.

Il n’y a pas eu de changements majeurs concernant la fonctionnalité d’authentification des emails dans Laravel (désormais en version 11), mais nous vous recommandons de mettre à jour vers la dernière version si ce n’est pas déjà fait.

Laravel 11, sorti le 12 mars 2024, continue d’offrir de puissantes capacités de vérification des emails tout en introduisant une structure d’application simplifiée et d’autres améliorations. Ce tutoriel vous guidera dans la configuration de l’authentification des emails dans Laravel 11 avec Mailgun et son déploiement sur Digital Ocean.

1. La version minimale requise de PHP est désormais la 8.2.

2. La structure de l’application est plus simplifiée avec un fichier bootstrat/app.php repensé.

3. Utilisation par défaut de SQLite pour le stockage de la base de données, les sessions, le cache et les files d’attente.

4. Nouvelle fonctionnalité de routage de santé pour la surveillance de l’application.

Créer une nouvelle application Laravel

La première étape consiste à créer une nouvelle application avec quelques configurations :

                                

                                    $ laravel new email-verification-example rnrn$ cd email-verification-example rnrn$ touch database/database.sqlite 
                                
                            

Cela créera l’application Laravel 11.x par défaut avec la structure d’authentification et un fichier pour une base de données SQLite. Mettez à jour votre fichier .env pour pointer vers le chemin complet du fichier SQLite :

                                

                                    DB_CONNECTION=sqlite rnDB_DATABASE=/full/path/to/email-verification-example/database/database.sqlite 
                                
                            

Vérification des emails dans Laravel 11

Examinons la structure d’authentification par défaut et voyons quelles modifications doivent être apportées pour ajouter la vérification des emails.

Vous pouvez consulter la documentation de Laravel sur la validation des emails ici.

Dans Laravel 11, le processus d’ajout de la vérification des emails reste similaire, mais la structure des fichiers a changé. Ouvrez votre fichier bootstrap/app.php et assurez-vous qu’il inclut les éléments suivants : 

Implémentez ensuite l’interface MustVerifyEmail. En PHP, une interface spécifie les méthodes qu’une classe doit implémenter. Vous devrez vérifier que votre AppModeIsUser implémente le contrat IlluminateContractsAuthMustVerifyEmail :

Cette interface impose d’avoir trois nouvelles méthodes sur notre modèle d’utilisateur :

  • hasVerifiedEmail()
  • markEmailAsVerified()
  • sendEmailVerificationNotification()

L’implémentation de ces méthodes se trouve dans : vendor/laravel/framework/src/Illuminate/Auth/MustVerifyEmail.php. Pour marquer un utilisateur comme vérifié, nous devons avoir une colonne email_verified_at dans notre table des utilisateurs, ce qui est déjà fourni dans notre migration par défaut de création de la table des utilisateurs :

                                

                                    Schema::create('users', function (Blueprint $table) { rn   $table->increments('id'); rn   $table->string('name'); rn   $table->string('email')->unique(); rn   $table->timestamp('email_verified_at')->nullable(); rn   $table->string('password'); rn   $table->rememberToken(); rn   $table->timestamps(); rn});
                                
                            

Exécutez les migrations pour créer la table : php artisan migrate.

Dans le fichier routes/web.php, mettez à jour les routes d’authentification pour inclure la vérification des emails :

                                

                                    Auth::routes(['verify' => true]);
                                
                            

Dans Laravel 11, les routes sont définies dans le fichier bootstrap/app.php. Assurez-vous que vos routes web sont incluses et ajoutez les routes de vérification : 

                                

                                    ->withRouting( rnrn    web: __DIR__.'/../routes/web.php', rnrn    commands: __DIR__.'/../routes/console.php', rnrn    health: '/up', rnrn) 
                                
                            

Ensuite, dans votre fichier routes/web.php, ajoutez : 

Pour voir toutes les routes disponibles pour votre application, vous pouvez exécuter php artisan route:list. C’est à peu près tout ce que nous devons faire du côté de Laravel pour vérifier les emails. Cependant, si vous essayez maintenant, cela ne fonctionnera pas.

Laravel code

Avant de pouvoir envoyer des emails depuis notre serveur PHP, nous devons configurer un pilote d’email dans Laravel. Vous pouvez tout de même vérifier en utilisant tinker pour voir qu’un utilisateur a été créé avec un email_verified_at défini sur null.

Place à Mailgun

Mailgun offre la possibilité d’envoyer des emails via un serveur SMTP ou via son API. Dans ce tutoriel, nous allons envoyer des emails via l’API de Mailgun. C’est plus rapide, cela évolue mieux et nécessite moins de travail à configurer que le SMTP.

Mailgun API call

Nous allons envoyer des appels API. Pour cela, nous avons besoin de Guzzle:

$ composer require guzzlehttp/guzzle

Pour que notre application puisse envoyer des emails : nous avons besoin d’un nom de domaine hébergé. J’ai un nom de domaine que j’ai acheté via Google Domains pour environ 12 $ par an. Le site (https://employbl.com/) est hébergé sur Laravel Forge moyennant un abonnement mensuel. Pour le déployer, j’ai suivi le cours Laracasts, Learn Laravel Forge.

Dans ce cours, j’ai configuré mon application Laravel pour qu’elle fonctionne sur des droplets Digital Ocean. Au cours de ce processus, j’ai configuré mon nom de domaine Google pour qu’il pointe vers Digital Ocean.

Une fois que vous avez créé un compte Mailgun, vous devrez vérifier votre domaine, ce qui prend environ 24 heures. Pour ce faire, nous devons ajouter des enregistrements TXT, CNAME et MX.  Si les enregistrements MX pointent déjà vers un fournisseur de messagerie, vous pouvez configurer un sous-domaine à la place. Pour trouver ces enregistrements, accédez au domaine dans votre compte Mailgun et consultez Vérification du domaine et DNS. Une fois que vous avez un domaine Mailgun fonctionnel, accédez au tableau de bord pour trouver votre clé API et mettez à jour le fichier .env en conséquence.

MAIL_DRIVER=mailgun MAILGUN_DOMAIN=mg.VOTRE_DOMAINE.com MAILGUN_SECRET=VOTRE_CLE_ICI

En savoir plus : Laravel est passé à un cycle de versionnement annuel. Désormais sur la version 10, vous pouvez vous attendre à des correctifs le 6 août 2024 et à des correctifs de sécurité d’ici le 14 février 2025. Consulter les notes de version de Laravel 10.

Vérifier que cela fonctionne

Une fois l’envoi d’emails configuré, après s’être inscrit, l’utilisateur verra une landing page lui demandant de vérifier ses emails. Cette page peut être modifiée dans resources/views/auth/verify.blade.php.

Verify your email Laravel

Cela enverra un véritable email à l’adresse que vous avez fournie. Le modèle de cet email se trouve dans IlluminateAuthNotificationsVerifyEmail.php.

Laravel verify email address link

Si nous ne voulons pas que nos emails de vérification affichent « Regards » ou le texte ci-dessus, nous devons alors les personnaliser. Vous pouvez publier les modèles par défaut en utilisant les commandes de publication ci-dessous :

                                

                                    $ php artisan vendor:publish --tag=laravel-notificationsrn$ php artisan vendor:publish --tag=laravel-mail
                                
                            

Écrivez ensuite les nouveaux paramètres par défaut dans resources/views/vendor/notifications/email.blade.php. Si vous avez d’autres modifications à apporter, vous pouvez réimplémenter la notification en ajoutant une nouvelle méthode sendEmailVerificationNotification à votre modèle d’utilisateur, qui renvoie une notification personnalisée que vous créez.

Une fois que l’utilisateur a cliqué sur le lien de vérification de l’adresse email, il sera redirigé vers son tableau de bord et pourra se connecter sans problème.

Laravel login

Cela devrait vous permettre de démarrer ! La partie la plus difficile pour moi a été de configurer le serveur de messagerie et Mailgun. Une fois votre domaine vérifié et Mailgun entièrement configuré, la partie concernant Laravel s’avère très simple.

Avez-vous réussi à tout mettre en place ? Quelqu’un utilise-t-il déjà cette fonctionnalité en production ? Contactez-moi sur Twitter ou laissez un commentaire ci-dessous.

Ressources

J’ai trouvé ces tutoriels très utiles, en plus des liens ci-dessus.

Vous voulez plus d’articles comme celui-ci de la part de Mailgun ?

Connor Leech, notre auteur invité, est ingénieur logiciel chez Stitch Labs. Vous pouvez le contacter via son email. Pour plus de guides et d’articles de résolution de problèmes, inscrivez-vous à notre newsletter afin de ne manquer aucun conseil de nos invités experts et de nos passionnés d’email.