Skip to main content

"Mot de passe oublié" : ajouté des deux côtés, mais toujours cassé (deux URL codées en dur)

Équipe Digitalisation UTB
Frontend, Backend & Backoffice

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.vue a un lien "Oublié ?" vers deux nouvelles vues, ForgotPasswordView.vue (/admin/forgot-password) et ResetPasswordView.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, token crypto.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​

  1. Backend — services/mailer.js::sendResetPasswordEmail construit le lien de réinitialisation avec http://localhost:5173/... codé en dur, alors que FRONTEND_URL est 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.
  2. Frontend — ForgotPasswordView.vue/ResetPasswordView.vue appellent toujours une URL codée en dur (http://localhost:5000/api/auth/forgot-password) au lieu de l'instance API partagée à baseURL configurable 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.