chartbastan/_bmad-output/implementation-artifacts/4-1-configurer-better-auth-pour-authentification.md
2026-02-01 09:31:38 +01:00

120 lines
4.4 KiB
Markdown

# Story 4.1: Configurer Better Auth pour authentification
Status: review
## Acceptance Criteria
**Given** Better Auth est installé
**When** je configure Better Auth dans Next.js
**Then** la configuration est créée avec support JWT stateless
**And** les routes d'authentification sont configurées (/api/auth/login, /api/auth/register)
**And** les cookies sécurisés sont configurés (HttpOnly, Secure, SameSite)
**And** la connexion à la base de données est établie
**Given** Better Auth est configuré
**When** je teste l'inscription
**Then** un nouvel utilisateur peut s'inscrire avec email et mot de passe
**And** le mot de passe est hashé avec bcrypt
**And** l'utilisateur est créé dans la base de données
## Tasks / Subtasks
- [x] Installer Better Auth (AC: #1)
- [x] Installer `better-auth`
- [x] Créer la configuration Better Auth dans `src/lib/auth.ts`
- [x] Configurer JWT stateless
- [x] Configurer les cookies sécurisés
- [x] Vérifier l'installation
- [x] Créer les routes d'authentification (AC: #1)
- [x] Créer `/api/auth/register`
- [x] Créer `/api/auth/login`
- [x] Créer `/api/auth/logout`
- [x] Créer `/api/auth/me` (profil utilisateur)
- [x] Configurer les handlers Better Auth
- [x] Créer le schéma utilisateur (AC: #1, #2)
- [x] Créer la table `users` dans Drizzle
- [x] Ajouter colonnes: email, password_hash, is_premium
- [x] Générer et appliquer les migrations
- [x] Configurer Better Auth avec le schéma utilisateur
- [x] Tester l'inscription (AC: #2)
- [x] Créer un endpoint de test POST `/api/auth/register`
- [x] Envoyer des données utilisateur valides
- [x] Vérifier que l'utilisateur est créé dans la base de données
- [x] Vérifier que le mot de passe est hashé
- [x] Tester l'inscription avec email déjà utilisé
- [x] Tester la connexion (AC: #1)
- [x] Créer un endpoint de test POST `/api/auth/login`
- [x] Envoyer email et mot de passe valides
- [x] Vérifier que le JWT est généré
- [x] Vérifier que les cookies sécurisés sont définis
- [x] Tester avec des identifiants invalides
## Dev Notes
### Stack Technique
- **Auth:** Better Auth v1.4.4
- **JWT:** Stateless
- **Cookies:** HttpOnly, Secure, SameSite
### File Structure
```
src/
├── lib/
│ └── auth.ts
├── db/
│ └── schema.ts (users table)
└── app/
└── api/
└── auth/
├── register/route.ts
├── login/route.ts
└── logout/route.ts
```
### References
- [Source: _bmad-output/planning-artifacts/epics.md#Story-4.1]
## Dev Agent Record
### Agent Model Used
GLM-4.7
### Completion Notes List
- Better Auth v1.4.14 installé et configuré avec succès
- Configuration JWT stateless implémentée avec cookies sécurisés (HttpOnly, Secure, SameSite)
- Schéma utilisateur mis à jour avec colonne password_hash dans Drizzle
- Migration générée et appliquée (0002_parched_zarda.sql)
- Quatre routes API créées: /api/auth/register, /api/auth/login, /api/auth/logout, /api/auth/me
- Tests d'intégration complets créés avec Vitest (13 tests, tous passants)
- Hashage des mots de passe avec bcryptjs implémenté
- Validation des données d'entrée et gestion des erreurs robuste
- Format de réponse API standardisé ({data, meta} ou {error, meta})
### Implementation Plan
1. Installation des dépendances: better-auth, bcryptjs, @types/bcryptjs
2. Configuration de Better Auth dans src/lib/auth.ts avec adaptateur Drizzle
3. Mise à jour du schéma utilisateur pour ajouter password_hash
4. Génération et application des migrations Drizzle
5. Création des routes d'authentification avec validation
6. Tests d'intégration complets couvrant tous les scénarios
### File List
- `src/lib/auth.ts` - Configuration Better Auth
- `src/app/api/auth/register/route.ts` - Route d'inscription
- `src/app/api/auth/login/route.ts` - Route de connexion
- `src/app/api/auth/logout/route.ts` - Route de déconnexion
- `src/app/api/auth/me/route.ts` - Route profil utilisateur
- `src/db/schema.ts` - Schéma mis à jour avec password_hash
- `src/tests/auth.test.ts` - Tests d'intégration (13 tests)
- `src/tests/setup.ts` - Configuration des tests
- `vitest.config.ts` - Configuration Vitest
- `package.json` - Scripts de test ajoutés
- `drizzle/migrations/0002_parched_zarda.sql` - Migration ajoutée
## Change Log
- 2026-01-17: Implémentation complète de l'authentification avec Better Auth, bcryptjs, et tests