"Mot de passe oublié" : ajouté des deux côtés, mais toujours cassé (deux URL codées en dur)
Le backoffice a désormais un vrai parcours "mot de passe oublié", frontend et backend compris — mais il ne fonctionne pas encore, pour deux raisons indépendantes.
Ce qui a été ajouté
- Frontend :
LoginView.vuea un lien "Oublié ?" vers deux nouvelles vues,ForgotPasswordView.vue(/admin/forgot-password) etResetPasswordView.vue(/admin/reset-password) — formulaire email, puis réinitialisation via lien. - Backend :
POST /api/auth/forgot-password/POST /api/auth/reset-password(auth.controller.js), avec de bonnes pratiques — ne révèle jamais si un email existe en base, tokencrypto.randomBytes(32)unique et expirant en 15 minutes, mot de passe validé par une regex forte à la réinitialisation.
Pourquoi ça ne marche toujours pas
- Backend —
services/mailer.js::sendResetPasswordEmailconstruit le lien de réinitialisation avechttp://localhost:5173/...codé en dur, alors queFRONTEND_URLest déjà disponible en configuration et déjà utilisée pour ce cas exact ailleurs dans le code (email d'invitation,utils/mailer.js). Le commentaire du code reconnaît lui-même le problème sans le corriger. - Frontend —
ForgotPasswordView.vue/ResetPasswordView.vueappellent toujours une URL codée en dur (http://localhost:5000/api/auth/forgot-password) au lieu de l'instance API partagée àbaseURLconfigurable utilisée partout ailleurs dans l'app.
Résultat : un email de réinitialisation envoyé depuis un serveur en production contiendra un lien vers localhost, injoignable pour le destinataire — et même en corrigeant ce lien à la main, le formulaire d'origine ne contacterait de toute façon pas le bon backend.
Pages de doc à jour
Authentification & 2FA, Bugs & failles actives connues, Dette technique connue.