Compare commits

..

4 Commits

Author SHA1 Message Date
241ce36b85 merge: doc tickets #24/#43 depuis develop 2026-04-16 22:56:47 +02:00
b0594c32e7 docs(tickets): #24 livré backend, #43 alignement API verify-token/create-password
Made-with: Cursor
2026-04-16 22:56:42 +02:00
8105c01501 Merge branch 'feature/123-durcissement-token-creation-mdp' into develop 2026-04-16 11:30:09 +02:00
2fa1e4a981 feat(auth): durcir le flux de création de mot de passe par token
Ajoute les endpoints verify-token/create-password avec garde-fous TTL, usage unique atomique et invalidation explicite du token pour sécuriser l'activation initiale des comptes.

Made-with: Cursor
2026-04-16 11:30:09 +02:00

View File

@ -519,22 +519,24 @@ Finalisation de l'inscription parent (présentation, CGU, récapitulatif - inté
--- ---
### Ticket #24 : [Backend] API Création mot de passe ### Ticket #24 : [Backend] API Création mot de passe
**Estimation** : 3h **Estimation** : 3h
**Labels** : `backend`, `p2`, `auth`, `security` **Labels** : `backend`, `p2`, `auth`, `security`
**Statut** : ✅ TERMINÉ (livré sur `develop` + `master`, févr. 2026 — aligné ticket Gitea **#123** durcissement token)
**Description** : **Description** :
Créer les endpoints pour permettre aux utilisateurs de créer leur mot de passe via le lien reçu par email. Créer les endpoints pour permettre aux utilisateurs de créer leur mot de passe via le lien reçu par email.
**Tâches** : **Tâches** :
- [ ] Endpoint `GET /api/v1/auth/verify-token?token=<uuid>` - [x] Endpoint `GET /api/v1/auth/verify-token?token=<uuid>`
- [ ] Endpoint `POST /api/v1/auth/create-password` - [x] Endpoint `POST /api/v1/auth/create-password` (body : `token`, `password`, `password_confirmation`)
- [ ] Validation token (existe, non expiré, non utilisé) - [x] Validation token (existe, non expiré, non utilisé) + invalidation explicite si expiré
- [ ] Hash bcrypt + suppression token - [x] Hash bcrypt + suppression token (usage unique atomique côté SQL)
- [ ] Activation compte (`statut = actif`) - [x] Activation compte (`statut = actif`, `changement_mdp_obligatoire = false`)
- [ ] Tests unitaires - [ ] Tests unitaires / e2e (hors périmètre immédiat ; suite Jest actuelle à corriger séparément)
**Référence** : [20_WORKFLOW-CREATION-COMPTE.md](./20_WORKFLOW-CREATION-COMPTE.md#étape-7--création-du-mot-de-passe) **Référence** : [20_WORKFLOW-CREATION-COMPTE.md](./20_WORKFLOW-CREATION-COMPTE.md#étape-7--création-du-mot-de-passe)
**Suite** : alignement **frontend** → ticket **#43** (appels explicites ci-dessous).
--- ---
@ -898,13 +900,15 @@ Créer les étapes finales de l'inscription AM (présentation, CGU, récapitulat
**Description** : **Description** :
Créer l'écran de création de mot de passe (lien reçu par email). Créer l'écran de création de mot de passe (lien reçu par email).
**Dépendance backend** : ticket **#24** / **#123** — routes disponibles sous préfixe global `api/v1` (voir `backend/src/main.ts`).
**Tâches** : **Tâches** :
- [ ] Page `/create-password?token=<uuid>` - [ ] Page `/create-password?token=<uuid>` (lecture du `token` en query)
- [ ] Vérification token (appel API) - [ ] Au chargement (ou avant affichage formulaire) : `GET /api/v1/auth/verify-token?token=<uuid>` — si 404, message neutre type « lien invalide ou expiré »
- [ ] Formulaire MDP + confirmation - [ ] Formulaire MDP + confirmation
- [ ] Validation côté client (8 car, 1 maj, 1 chiffre) - [ ] Validation côté client (alignée backend : min 8 car., 1 maj., 1 chiffre — même règle que `change-password-required`)
- [ ] Appel API création MDP - [ ] Soumission : `POST /api/v1/auth/create-password` avec JSON `{ "token", "password", "password_confirmation" }` ; gérer 400 (ex. confirmation) / 404 (token)
- [ ] Redirection vers login - [ ] Succès → redirection vers login + message de succès
--- ---