73 lines
No EOL
3 KiB
Markdown
73 lines
No EOL
3 KiB
Markdown
# Système d'Authentification par Mot de Passe
|
|
|
|
## Résumé des modifications
|
|
|
|
J'ai implémenté un système d'authentification par mot de passe en complément du système OTP existant. Voici les principales modifications :
|
|
|
|
## 🔧 Nouveaux endpoints API
|
|
|
|
### `/api/auth/signin-password` (POST)
|
|
- Permet la connexion avec email/mot de passe
|
|
- Retourne une session et définit un cookie httpOnly `access_token`
|
|
- Effectue les mêmes vérifications de sécurité que le système OTP (staff/revocation)
|
|
|
|
### `/api/auth/password-update` (POST)
|
|
- Met à jour le mot de passe d'un utilisateur connecté
|
|
- Marque l'utilisateur comme ayant un mot de passe (`user_metadata.hasPassword = true`)
|
|
- Exige un mot de passe d'au moins 12 caractères
|
|
|
|
### `/api/auth/password-status` (GET)
|
|
- Récupère le statut du mot de passe pour un utilisateur connecté
|
|
- Retourne `{ hasPassword: boolean }`
|
|
|
|
## 🎨 Interface utilisateur
|
|
|
|
### Page de sécurité (`/compte/securite`)
|
|
- ✅ La card de changement de mot de passe est maintenant **fonctionnelle**
|
|
- ✅ Utilise les endpoints API sécurisés au lieu de Supabase directement
|
|
- ✅ Affiche le statut du mot de passe (défini/non défini)
|
|
- ⚠️ Section 2FA temporairement désactivée comme demandé
|
|
|
|
### Page de connexion (`/signin`)
|
|
- ✅ **Nouveau toggle** pour choisir entre "Code par e-mail" et "Mot de passe"
|
|
- ✅ Mode mot de passe : champs email + password
|
|
- ✅ Mode OTP : comportement existant inchangé
|
|
- ✅ Interface cohérente avec le design existant
|
|
|
|
## 🔐 Sécurité
|
|
|
|
- Les mots de passe sont gérés par Supabase Auth (chiffrement automatique)
|
|
- Les mêmes vérifications de révocation s'appliquent aux deux modes d'auth
|
|
- Les cookies `access_token` httpOnly maintiennent la sécurité de session
|
|
- Minimum 12 caractères pour les mots de passe
|
|
|
|
## 📋 Utilisation
|
|
|
|
### Pour les utilisateurs
|
|
1. **Définir un mot de passe** : Aller sur `/compte/securite` → section "Mot de passe (facultatif)"
|
|
2. **Se connecter** : Sur `/signin`, choisir "Mot de passe" au lieu de "Code par e-mail"
|
|
|
|
### Pour les développeurs
|
|
- Les endpoints existants n'ont pas été modifiés
|
|
- Le middleware et la gestion des sessions restent identiques
|
|
- Les métadonnées utilisateur incluent maintenant `hasPassword: true` quand applicable
|
|
|
|
## ✅ Tests à effectuer
|
|
|
|
1. [ ] Créer un mot de passe depuis la page de sécurité
|
|
2. [ ] Vérifier que le statut "Mot de passe défini" s'affiche
|
|
3. [ ] Se connecter avec email/mot de passe
|
|
4. [ ] Vérifier que l'ancien système OTP fonctionne toujours
|
|
5. [ ] Tester avec un utilisateur staff
|
|
6. [ ] Tester avec un utilisateur révoqué
|
|
|
|
## 🚀 Prochaines étapes suggérées
|
|
|
|
1. **Réinitialisation de mot de passe** : Endpoint pour changer un mot de passe oublié
|
|
2. **2FA** : Réactiver et intégrer la double authentification
|
|
3. **Politique de mot de passe** : Ajouter des règles de complexité configurables
|
|
4. **Audit** : Logger les tentatives de connexion par mot de passe
|
|
|
|
---
|
|
|
|
Le système est maintenant **prêt à utiliser** avec les deux modes d'authentification fonctionnels ! 🎉 |