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

4.4 KiB

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

  • Installer Better Auth (AC: #1)

    • Installer better-auth
    • Créer la configuration Better Auth dans src/lib/auth.ts
    • Configurer JWT stateless
    • Configurer les cookies sécurisés
    • Vérifier l'installation
  • Créer les routes d'authentification (AC: #1)

    • Créer /api/auth/register
    • Créer /api/auth/login
    • Créer /api/auth/logout
    • Créer /api/auth/me (profil utilisateur)
    • Configurer les handlers Better Auth
  • Créer le schéma utilisateur (AC: #1, #2)

    • Créer la table users dans Drizzle
    • Ajouter colonnes: email, password_hash, is_premium
    • Générer et appliquer les migrations
    • Configurer Better Auth avec le schéma utilisateur
  • Tester l'inscription (AC: #2)

    • Créer un endpoint de test POST /api/auth/register
    • Envoyer des données utilisateur valides
    • Vérifier que l'utilisateur est créé dans la base de données
    • Vérifier que le mot de passe est hashé
    • Tester l'inscription avec email déjà utilisé
  • Tester la connexion (AC: #1)

    • Créer un endpoint de test POST /api/auth/login
    • Envoyer email et mot de passe valides
    • Vérifier que le JWT est généré
    • Vérifier que les cookies sécurisés sont définis
    • 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