120 lines
4.4 KiB
Markdown
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
|