# 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 ! 🎉