# 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