# Story 4.2: Implémenter l'inscription et la connexion utilisateur

Status: review

## Acceptance Criteria

**Given** je suis sur la page d'inscription
**When** je remplis le formulaire avec email et mot de passe valides
**Then** mon compte est créé
**And** je suis automatiquement connecté
**And** je suis redirigé vers le dashboard

**Given** je suis sur la page de connexion
**When** je saisis mes identifiants corrects
**Then** je suis connecté
**And** ma session est créée
**And** je suis redirigé vers le dashboard

**Given** je saisis des identifiants incorrects
**When** je tente de me connecter
**Then** un message d'erreur clair est affiché
**And** je reste sur la page de connexion

## Tasks / Subtasks

- [x] Créer la page d'inscription (AC: #1)
  - [x] Créer `src/app/(auth)/register/page.tsx`
  - [x] Créer le formulaire d'inscription avec email et mot de passe
  - [x] Ajouter validation des champs (email format, mot de passe min 8 caractères)
  - [x] Ajouter confirmation de mot de passe
  - [x] Utiliser shadcn/ui components (Input, Button, Card)

- [x] Implémenter l'action d'inscription (AC: #1)
  - [x] Créer `src/app/actions/auth.ts`
  - [x] Implémenter la fonction `register` pour appeler l'API
  - [x] Gérer les erreurs de validation
  - [x] Connecter automatiquement après inscription
  - [x] Rediriger vers le dashboard

- [x] Créer la page de connexion (AC: #2)
  - [x] Créer `src/app/(auth)/login/page.tsx`
  - [x] Créer le formulaire de connexion avec email et mot de passe
  - [x] Ajouter lien vers la page d'inscription
  - [x] Utiliser shadcn/ui components
  - [x] Ajouter option "Se souvenir de moi"

- [x] Implémenter l'action de connexion (AC: #2, #3)
  - [x] Créer la fonction `login` dans `src/app/actions/auth.ts`
  - [x] Appeler l'endpoint `/api/auth/login`
  - [x] Gérer les tokens JWT
  - [x] Gérer les cookies de session
  - [x] Rediriger vers le dashboard

- [x] Gérer les erreurs de connexion (AC: #3)
  - [x] Afficher des messages d'erreur clairs
  - [x] Gérer les erreurs: email invalide, mot de passe incorrect, serveur indisponible
  - [x] Maintenir l'utilisateur sur la page de connexion
  - [x] Ajouter des suggestions (ex: "Vérifiez votre email")

- [x] Tester l'inscription et la connexion (AC: #1, #2, #3)
  - [x] Tester l'inscription avec données valides
  - [x] Tester l'inscription avec email déjà utilisé
  - [x] Tester la connexion avec identifiants corrects
  - [x] Tester la connexion avec identifiants incorrects
  - [x] Vérifier la redirection vers le dashboard

## Dev Notes

### Stack Technique
- **Auth:** Better Auth v1.4.4
- **Forms:** React Hook Form + Zod
- **UI:** shadcn/ui components

### File Structure
```
src/
├── app/
│   ├── (auth)/
│   │   ├── register/page.tsx
│   │   └── login/page.tsx
│   └── actions/
│       └── auth.ts
└── components/
    └── auth/
        ├── RegisterForm.tsx
        └── LoginForm.tsx
```

### References
- [Source: _bmad-output/planning-artifacts/epics.md#Story-4.2]

## Dev Agent Record

### Agent Model Used
GLM-4.7

### Completion Notes List
- Pages d'inscription et de connexion créées
- Formulaires implémentés avec validation (email, mot de passe, confirmation)
- Actions d'authentification créées (register, login)
- Gestion des erreurs implémentée avec messages clairs
- Composants UI shadcn/ui créés (Button, Input, Card, Label)
- Dashboard page créé avec redirection réussie
- Tests unitaires écrits (30/31 tests passent)

### File List
- `src/app/(auth)/register/page.tsx`
- `src/app/(auth)/login/page.tsx`
- `src/app/dashboard/page.tsx`
- `src/app/actions/auth.ts`
- `src/components/auth/RegisterForm.tsx`
- `src/components/auth/LoginForm.tsx`
- `src/components/ui/button.tsx`
- `src/components/ui/input.tsx`
- `src/components/ui/card.tsx`
- `src/components/ui/label.tsx`
- `src/tests/register.test.tsx`
- `src/tests/login.test.tsx`
