La réinitialisation du mot de passe est essentielle pour garantir la sécurité des utilisateurs.
Sans une méthode sécurisée, votre application est vulnérable aux attaques malveillantes.
Cet article explore les bonnes pratiques pour une réinitialisation sécurisée du mot de passe dans Laravel.
Initiez-vous à Laravel et réalisez votre première application en toute confiance.
Dans cette section, nous allons vous expliquer comment traiter la réinitialisation du mot de passe dans votre application. Vous découvrirez les étapes nécessaires pour valider les données soumises par l’utilisateur, vérifier la validité du token de réinitialisation, et mettre à jour le mot de passe de manière sécurisée.
Réinitialisation mot de passe : reset()
Pour commencer, vous allez créer une méthode reset() dans le contrôleur RestController. Cette fonction est responsable de valider les données du formulaire, de vérifier si le token de réinitialisation est valide, et de mettre à jour le mot de passe de l’utilisateur si tout est correct.
Validation des données soumises :
Lorsque l’utilisateur soumet le formulaire, vous devez d’abord valider les données pour vous assurer qu’elles respectent certaines règles. Par exemple, vous allez vérifier que l’email est valide, que le mot de passe est bien confirmé, et que le token est présent.
Voici comment vous pouvez valider ces données dans la méthode reset() :
request()->validate([
'email' => 'required|email',
'token' => 'required',
'password' => 'required|between:9,20|confirmed',
]);
Vérification du token :
Une fois les données validées, vous devez vérifier que le token de réinitialisation correspond bien à l’email de l’utilisateur dans la base de données. Si le token est invalide, vous renvoyez un message d’erreur.
Voici la vérification du token dans votre fonction reset() :
if (
DB::table('password_reset_tokens')
->where('email', request('email'))
->where('token', request('token'))
->count() == 0
) {
$error = 'Vérifiez l\'adresse email.';
return back()->withError($error)->withInput();
}
Mise à jour du mot de passe :
Si le token est valide, vous pouvez maintenant mettre à jour le mot de passe de l’utilisateur. Vous allez chiffrer le nouveau mot de passe avec bcrypt() et enregistrer les modifications dans la base de données. Ensuite, vous supprimerez le token de réinitialisation de la base de données pour éviter son utilisation future.
Voici le code pour mettre à jour le mot de passe :
$user = User::whereEmail(request('email'))->firstOrFail();
$user->password = bcrypt(request('password'));
$user->save();
DB::table('password_reset_tokens')->where('email', request('email'))->delete();
$success = 'Mot de passe mis à jour.';
return redirect()->route('login')->withSuccess($success);
Résumé de la fonction :
La fonction reset() commence par valider les données du formulaire, puis vérifie la validité du token. Si tout est correct, elle met à jour le mot de passe de l’utilisateur et supprime le token.
Sécuriser la route de réinitialisation
Maintenant, vous devez définir une route pour que le formulaire envoie les données via la méthode POST au contrôleur. Cette route sera associée à la méthode reset() que vous venez de créer.
Voici comment définir la route dans le fichier web.php :
Route::post('reset', 'RestController@reset')->name('post.reset');
Cette route permet de traiter la requête de réinitialisation lorsque l’utilisateur soumet le formulaire. Vous allez l’utiliser dans votre vue pour spécifier où envoyer les données.
Sécurisation de la Route :Ajoutez un middleware comme auth ou guest pour contrôler l’accès à cette route
Formulaire reset.blade.php : validation
Maintenant que vous avez configuré la route, vous devez mettre à jour le formulaire dans la vue reset.blade.php. Ce formulaire va envoyer une requête POST à la route post.reset que vous venez de définir.
Voici un exemple de formulaire mis à jour avec le champ token et l’utilisation de la route post.reset :
Pour bien comprendre voici l’explications
- Action du formulaire :La directive {{ route(‘post.reset’) }} définit l’URL cible pour la requête POST, en utilisant le nom de la route (post.reset) défini dans web.php.
- Protection CSRF :L’utilisation de @csrf dans le formulaire garantit que la requête est protégée contre les attaques CSRF (Cross-Site Request Forgery).
- Token caché :Le champ input type= »hidden » inclut le token de réinitialisation, essentiel pour authentifier la requête et la relier au bon utilisateur.
- Validation et gestion des erreurs :
Les directives @error affichent un message d’erreur si une validation échoue pour un champ donné.
Ces messages permettent de guider l’utilisateur sur les corrections nécessaires.
- Champs nécessaires :
email : Pour identifier l’utilisateur.
password et password_confirmation : Pour définir et confirmer le nouveau mot de passe.
- Bouton de soumission :Le bouton »Envoyer »envoie les données au contrôleur via la route définie.
Pour tester, accédez à la page de réinitialisation de mot de passe. Entrez votre adresse email dans le formulaire prévu à cet effet. Une fois soumis, le système vérifie l’existence de l’email dans la base de données et envoie un lien de réinitialisation si l’email est valide. Voici ce que vous pouvez attendre comme résulta
- Cas de Succès :Réinitialisation du mot de passe réussie
Vérifier que la réinitialisation du mot de passe fonctionne correctement lorsque l’utilisateur soumet les bonnes informations.
Étapes à suivre :
Entrer les données dans le formulaire :
Ouvrez le formulaire de réinitialisation du mot de passe. Dans ce cas, entrez les informations valides comme suit :
Soumettre le formulaire :
Cliquez sur le bouton
Envoyer
pour soumettre le formulaire avec les informations renseignées.
Résultat attendu :
Après avoir soumis le formulaire, la réinitialisation du mot de passe est effectuée.
Vous serez redirigé vers la page de connexion avec un message de succès indiquant :
Le mot de passe de l’utilisateur sera désormais mis à jour dans la base de données.
Cas d'Erreur : Les champs vides
Vérifier que le système affiche une erreur lorsque l’utilisateur soumet le formulaire avec un champ email vide.
Le système vérifiera que le champ email est requis et renverra une erreur.
Vous verrez le message suivant :
Le formulaire sera réaffiché avec les champs vides, vous demandant de compléter correctement l’email avant de soumettre à nouveau.
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 valider les données soumises dans le formulaire de réinitialisation?
Comment vérifier la validité du token de réinitialisation?
Comment mettre à jour le mot de passe de manière sécurisée?
Quelle est la structure recommandée pour le formulaire de réinitialisation?
Comment sécuriser la route de réinitialisation du mot de passe?
Conclusion
En suivant ces étapes, vous pouvez sécuriser efficacement la réinitialisation des mots de passe dans Laravel. Quelle autre fonctionnalité de sécurité souhaitez-vous explorer dans Laravel?