La perte de mot de passe est un problème courant pour les utilisateurs d’applications web.
Cela peut entraîner une frustration importante et compromettre la sécurité si le processus de récupération n’est pas sécurisé.
Cet article explore la mise en œuvre d’une réinitialisation de mot de passe sécurisée dans Laravel, en utilisant des jetons uniques et des notifications par email.
Initiez-vous à Laravel et réalisez votre première application en toute confiance.
Dans ce chapitre, nous allons implémenter une fonctionnalité qui permet à un utilisateur de réinitialiser son mot de passe en lui envoyant un lien sécurisé par email. Ce lien contiendra un jeton de réinitialisation unique que l’utilisateur pourra utiliser pour mettre à jour son mot de passe.
Modifier store pour réinitialisation Laravel
La première étape consiste à modifier la méthode store dans le contrôleur de réinitialisation du mot de passe (par exemple ForgotPasswordController). Cette méthode sera responsable de valider l’email de l’utilisateur, de générer un jeton unique, et d’envoyer une notification par email avec un lien de réinitialisation.
Voici le code modifié pour la méthode store :
public function store() // vérification des données et envoi de lien par mail
{
request()->validate([
'email' => 'required|email|exists:users',
]);
$token = Str::uuid();
DB::table('password_reset_tokens')->insert([
'email' => request('email'),
'token' => $token,
'created_at' => now(),
]);
// Envoi de notification avec un lien sécurisé
$user = User::whereEmail(request('email'))->firstOrFail();
if (!$user) {
return back()->withError('Utilisateur non trouvé.');
}
$user->notify(new PasswordResetNotification($token));
$success = 'Vérifiez votre boîte mail et suivez les instructions.';
return back()->withSuccess($success);
}
Explication du code :
- Validation :L’email est validé pour s’assurer qu’il existe dans la base de données des utilisateurs.
- Génération du token :Un token unique est généré avec la fonction Str::uuid().
- Enregistrement dans la base de données :Le token est inséré dans la table password_reset_tokens avec l’email de l’utilisateur et la date de création.
- Envoi de la notification :La notification est envoyée à l’utilisateur avec le token généré, qui contient le lien de réinitialisation.
- Retour avec un message de succès :L’utilisateur est informé qu’il doit vérifier sa boîte mail.
Créer PasswordResetNotification Laravel
La notification PasswordResetNotification va être responsable de la création du contenu du mail, incluant un lien sécurisé permettant à l’utilisateur de réinitialiser son mot de passe.
Pour créer cette notification, vous pouvez utiliser la commande Artisan suivante
php artisan make:notification PasswordResetNotification
Voici l’implémentation complète de la notification
token = $token;
}
/**
* Get the notification's delivery channels.
*
* @return array
*/
public function via(object $notifiable): array
{
return ['mail'];
}
/**
* Get the mail representation of the notification.
*/
public function toMail(object $notifiable): MailMessage
{
if (!$this->token) {
\Log::error('Token manquant dans PasswordResetNotification pour ' . $notifiable->email);
} else {
\Log::info('Token utilisé dans PasswordResetNotification : ' . $this->token);
}
return (new MailMessage())
->greeting('Bonjour ' . $notifiable->name)
->subject('Oubli de mot de passe')
->line('Veuillez cliquer sur le lien ci-dessous pour réinitialiser votre mot de passe')
->action('Réinitialiser', url('/reset/' . $this->token))
->salutation('À bientôt, ' . config('app.name'));
}
/**
* Get the array representation of the notification.
*
* @return array
*/
public function toArray(object $notifiable): array
{
return [
//
];
}
}
Explication de la notification :
- Canaux de livraison :Nous utilisons le canal mail pour envoyer un email à l’utilisateur.
- Contenu du mail :Le mail contient un message de bienvenue, un sujet, une ligne expliquant l’action à réaliser et un bouton d’action avec un lien pour réinitialiser le mot de passe.
- Logs :Des logs sont ajoutés pour vérifier le bon passage du token dans le processus.
Configurer Mailtrap pour email sécurisé
Mailtrap est un outil de test d’email qui vous permet de simuler l’envoi d’emails sans envoyer de véritables messages. Dans cette étape, nous allons configurer Laravel pour utiliser Mailtrap comme serveur SMTP pour tester l’envoi d’emails.
- Créer un compte Mailtrap
Mailtrap permet de tester l’envoi d’emails en toute sécurité sans risquer d’envoyer de vrais emails à des utilisateurs. Inscrivez-vous sur Mailtrap et créez une inbox pour recevoir les messages de test.
- Configuration de .env
Une fois votre compte Mailtrap configuré, récupérez les informations de connexion SMTP et mettez à jour votre fichier .env pour que Laravel puisse envoyer les emails via Mailtrap.
Pour tester l’envoi de mails sans envoyer de véritables emails en production, nous utilisons un service comme Mailtrap . Mailtrap capture les emails envoyés dans un environnement de test.
Voici la configuration que vous devez ajouter à votre fichier .env pour utiliser Mailtrap :
MAIL_MAILER=smtp
MAIL_HOST=smtp.mailtrap.io
MAIL_PORT=2525
MAIL_USERNAME=your_mailtrap_username
MAIL_PASSWORD=your_mailtrap_password
MAIL_ENCRYPTION=tls
MAIL_FROM_ADDRESS=noreply@yourdomain.com
MAIL_FROM_NAME="${APP_NAME}"
- MAIL_HOST :L’adresse du serveur SMTP Mailtrap.
- MAIL_PORT :Le port utilisé par Mailtrap.
- MAIL_USERNAME et MAIL_PASSWORD :Vos informations d’identification Mailtrap.
- MAIL_FROM_ADDRESS :L’adresse de l’expéditeur.
- MAIL_FROM_NAME :Le nom de l’expéditeur qui apparaîtra dans l’email
Tester emails sécurisés avec Mailtrap
Une fois que vous avez configuré tout cela, vous pouvez tester l’envoi d’email en suivant ces étapes :
- Accédez à la page de réinitialisation de mot de passe :Entrez un email valide dans le formulaire.
- Vérifiez votre boîte Mailtrap :Connectez-vous à Mailtrap et vérifiez que le message est bien envoyé.
Voici l’affichage de message sur Mailtrap
- Cliquez sur le lien de réinitialisation :Testez que le lien redirige correctement l’utilisateur vers la page de réinitialisation.
Vous avez maintenant une fonctionnalité complète pour permettre aux utilisateurs de réinitialiser leur mot de passe en toute sécurité. Cette fonctionnalité inclut l’envoi d’un lien de réinitialisation par email, la génération d’un token unique, et l’utilisation de Mailtrap pour tester l’envoi des mails en toute sécurité.
Formez-vous gratuitement avec Alphorm !
Maîtrisez les compétences clés en IT grâce à nos formations gratuites et accélérez votre carrière dès aujourd'hui.
FAQ
Comment réinitialiser un mot de passe dans Laravel ?
Comment envoyer une notification de réinitialisation de mot de passe ?
Qu'est-ce que Mailtrap et comment est-il utilisé ?
Comment configurer Mailtrap dans Laravel ?
Comment tester l'envoi d'emails de réinitialisation avec Mailtrap ?
Conclusion
Vous avez maintenant une compréhension claire de la mise en œuvre de la réinitialisation de mot de passe dans Laravel. Comment allez-vous appliquer ces connaissances pour renforcer la sécurité de votre application ?