Files
Dashboard/middleware.ts
nBiqoz 0f2adca44a new
2025-10-06 19:16:20 +02:00

65 lines
1.9 KiB
TypeScript

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<string, unknown> }>) {
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).*)',
],
}