# Migration vers NextAuth v5 - Résumé ## Changements effectués ### 1. Installation - ✅ Installé `next-auth@5.0.0-beta.29` ### 2. Configuration NextAuth - ✅ Créé `auth.ts` à la racine avec: - Credentials provider utilisant `userService.verifyCredentials()` - Stratégie JWT - Callbacks pour enrichir la session avec `userId`, `teamId`, `firstName`, `lastName` - Pages custom (`/login`) - Middleware callback `authorized` pour protéger les routes - ✅ Créé `app/api/auth/[...nextauth]/route.ts` pour les handlers NextAuth - ✅ Créé `types/next-auth.d.ts` pour étendre les types Session et User ### 3. Middleware - ✅ Remplacé le middleware custom par `export { auth as middleware } from "@/auth"` - ✅ Les redirections sont gérées dans le callback `authorized` ### 4. Routes API - ✅ Supprimé `app/api/auth/login/route.ts` (géré par NextAuth) - ✅ Supprimé `app/api/auth/logout/route.ts` (géré par NextAuth) - ✅ Supprimé `app/api/auth/profile/route.ts` (utiliser `useSession()` côté client) - ✅ Adapté `app/api/auth/register/route.ts` pour retourner les infos sans créer de session - ✅ Mis à jour toutes les routes protégées pour utiliser `auth()` au lieu de `AuthService.requireAuthenticatedUser()` ### 5. Services - ✅ Supprimé `services/auth-service.ts` (remplacé par NextAuth) - ✅ Mis à jour `services/evaluation-service.ts` pour ne plus utiliser `AuthService` - ✅ Mis à jour `services/index.ts` pour retirer l'export d'AuthService ### 6. Clients - ✅ Mis à jour `clients/domains/auth-client.ts` pour utiliser: - `signIn("credentials")` pour le login - `signOut()` pour le logout - Auto-login après register avec `signIn()` ### 7. Frontend - ✅ Créé `components/auth/session-provider.tsx` - ✅ Wrapped l'application avec `` dans `app/layout.tsx` - ✅ Mis à jour tous les composants pour utiliser la session NextAuth - ✅ Mis à jour toutes les pages serveur pour utiliser `auth()` au lieu de `AuthService` ## Configuration requise ### Variables d'environnement Créer un fichier `.env.local` avec: ```bash # Générer un secret avec: openssl rand -base64 32 AUTH_SECRET=your-generated-secret-here # Pour la production # AUTH_URL=https://your-domain.com ``` ### Pour générer AUTH_SECRET ```bash openssl rand -base64 32 ``` ## Utilisation ### Côté serveur (Server Components, API Routes) ```typescript import { auth } from "@/auth"; export default async function Page() { const session = await auth(); if (!session?.user) { redirect("/login"); } const userId = session.user.id; const teamId = session.user.teamId; const firstName = session.user.firstName; // ... } ``` ### Côté client (Client Components) ```typescript "use client"; import { useSession } from "next-auth/react"; import { signIn, signOut } from "next-auth/react"; export function MyComponent() { const { data: session, status } = useSession(); if (status === "loading") return
Loading...
; if (!session) return
Not authenticated
; return (

Welcome {session.user.firstName}!

); } ``` ### Login/Register ```typescript // Login const result = await signIn("credentials", { email, password, redirect: false, }); if (result?.error) { // Handle error } // Register (via API puis auto-login) const response = await fetch("/api/auth/register", { method: "POST", body: JSON.stringify(data), }); if (response.ok) { await signIn("credentials", { email, password, redirect: false }); } // Logout await signOut({ redirect: false }); ``` ## Compatibilité ### Utilisateurs existants ✅ **Tous les utilisateurs existants sont compatibles** car: - La table `users` contient déjà `email` et `password_hash` - La méthode `userService.verifyCredentials()` vérifie les mots de passe hashés avec bcrypt - Les UUID sont préservés ### Sessions - ⚠️ Les anciennes sessions (cookie `session_token`) ne sont plus valides - Les utilisateurs devront se reconnecter une fois - NextAuth utilise ses propres cookies de session ## Testing ### Vérifications à faire 1. ✅ Login avec email/password 2. ✅ Logout 3. ✅ Register puis auto-login 4. ✅ Routes protégées redirigent vers /login si non authentifié 5. ✅ /login redirige vers / si déjà authentifié 6. ✅ Les évaluations fonctionnent correctement 7. ✅ Les pages admin fonctionnent correctement ## Rollback (si nécessaire) Si des problèmes surviennent, voici les commits importants: - Installation de NextAuth - Création de auth.ts et configuration - Mise à jour des routes et services - Suppression de auth-service.ts Pour rollback: `git revert ` des commits concernés. ## Notes - NextAuth v5 utilise des cookies signés et sécurisés automatiquement - Les sessions JWT sont stateless (pas de stockage en base) - La configuration `authorized` dans auth.ts gère toute la logique de protection des routes - Le SessionProvider doit wrapper toute l'application pour que `useSession()` fonctionne