import { createServerClient } from '@supabase/ssr' import { NextResponse, type NextRequest } from 'next/server' export async function middleware(request: NextRequest) { let supabaseResponse = NextResponse.next({ request, }) const supabase = createServerClient( process.env.NEXT_PUBLIC_SUPABASE_URL!, process.env.NEXT_PUBLIC_SUPABASE_ANON_KEY!, { cookies: { getAll() { return request.cookies.getAll() }, setAll(cookiesToSet: Array<{ name: string; value: string; options?: Record }>) { cookiesToSet.forEach(({ name, value }) => request.cookies.set(name, value)) supabaseResponse = NextResponse.next({ request, }) cookiesToSet.forEach(({ name, value, options }) => supabaseResponse.cookies.set(name, value, options) ) }, }, } ) // Rafraîchir la session const { data: { user } } = await supabase.auth.getUser() // Si l'utilisateur est sur la page de login if (request.nextUrl.pathname === '/login') { if (user) { // Utilisateur connecté, rediriger vers le dashboard const redirectUrl = new URL('/', request.url) return NextResponse.redirect(redirectUrl) } // Utilisateur non connecté, autoriser l'accès à la page de login return supabaseResponse } // Pour toutes les autres pages, vérifier l'authentification if (!user) { // Utilisateur non connecté, rediriger vers login const redirectUrl = new URL('/login', request.url) return NextResponse.redirect(redirectUrl) } return supabaseResponse } export const config = { matcher: [ /* * Match all request paths except for the ones starting with: * - _next/static (static files) * - _next/image (image optimization files) * - favicon.ico (favicon file) * - public folder */ '/((?!_next/static|_next/image|favicon.ico|public|img).*)', ], }