From 5514af9555d6b08655c158298842fb7922376326 Mon Sep 17 00:00:00 2001 From: Claude Date: Sun, 8 Feb 2026 14:17:09 +0000 Subject: [PATCH] fix: remove middleware and route groups to fix Vercel deployment - Remove middleware.ts entirely (caused __dirname ReferenceError in Edge) - Auth protection handled by dashboard layout.tsx (server-side redirect) - Move pages out of (marketing) and (auth) route groups to fix 404 on / - Keep (protected) route group for dashboard/formations/profil shared layout https://claude.ai/code/session_01H2aRGDaKgarPvhay2HxN6Y --- .../dashboard/page.tsx | 0 .../[moduleId]/MarkCompleteButton.tsx | 0 .../formations/[moduleId]/page.tsx | 0 .../formations/page.tsx | 0 app/{(dashboard) => (protected)}/layout.tsx | 0 .../profil/page.tsx | 0 app/{(marketing) => }/candidature/page.tsx | 0 app/{(auth) => }/login/page.tsx | 0 app/{(marketing) => }/merci/page.tsx | 0 app/{(marketing) => }/page.tsx | 0 app/{(auth) => }/register/page.tsx | 0 lib/supabase/middleware.ts | 59 ----------- middleware.ts | 97 ------------------- 13 files changed, 156 deletions(-) rename app/{(dashboard) => (protected)}/dashboard/page.tsx (100%) rename app/{(dashboard) => (protected)}/formations/[moduleId]/MarkCompleteButton.tsx (100%) rename app/{(dashboard) => (protected)}/formations/[moduleId]/page.tsx (100%) rename app/{(dashboard) => (protected)}/formations/page.tsx (100%) rename app/{(dashboard) => (protected)}/layout.tsx (100%) rename app/{(dashboard) => (protected)}/profil/page.tsx (100%) rename app/{(marketing) => }/candidature/page.tsx (100%) rename app/{(auth) => }/login/page.tsx (100%) rename app/{(marketing) => }/merci/page.tsx (100%) rename app/{(marketing) => }/page.tsx (100%) rename app/{(auth) => }/register/page.tsx (100%) delete mode 100644 lib/supabase/middleware.ts delete mode 100644 middleware.ts diff --git a/app/(dashboard)/dashboard/page.tsx b/app/(protected)/dashboard/page.tsx similarity index 100% rename from app/(dashboard)/dashboard/page.tsx rename to app/(protected)/dashboard/page.tsx diff --git a/app/(dashboard)/formations/[moduleId]/MarkCompleteButton.tsx b/app/(protected)/formations/[moduleId]/MarkCompleteButton.tsx similarity index 100% rename from app/(dashboard)/formations/[moduleId]/MarkCompleteButton.tsx rename to app/(protected)/formations/[moduleId]/MarkCompleteButton.tsx diff --git a/app/(dashboard)/formations/[moduleId]/page.tsx b/app/(protected)/formations/[moduleId]/page.tsx similarity index 100% rename from app/(dashboard)/formations/[moduleId]/page.tsx rename to app/(protected)/formations/[moduleId]/page.tsx diff --git a/app/(dashboard)/formations/page.tsx b/app/(protected)/formations/page.tsx similarity index 100% rename from app/(dashboard)/formations/page.tsx rename to app/(protected)/formations/page.tsx diff --git a/app/(dashboard)/layout.tsx b/app/(protected)/layout.tsx similarity index 100% rename from app/(dashboard)/layout.tsx rename to app/(protected)/layout.tsx diff --git a/app/(dashboard)/profil/page.tsx b/app/(protected)/profil/page.tsx similarity index 100% rename from app/(dashboard)/profil/page.tsx rename to app/(protected)/profil/page.tsx diff --git a/app/(marketing)/candidature/page.tsx b/app/candidature/page.tsx similarity index 100% rename from app/(marketing)/candidature/page.tsx rename to app/candidature/page.tsx diff --git a/app/(auth)/login/page.tsx b/app/login/page.tsx similarity index 100% rename from app/(auth)/login/page.tsx rename to app/login/page.tsx diff --git a/app/(marketing)/merci/page.tsx b/app/merci/page.tsx similarity index 100% rename from app/(marketing)/merci/page.tsx rename to app/merci/page.tsx diff --git a/app/(marketing)/page.tsx b/app/page.tsx similarity index 100% rename from app/(marketing)/page.tsx rename to app/page.tsx diff --git a/app/(auth)/register/page.tsx b/app/register/page.tsx similarity index 100% rename from app/(auth)/register/page.tsx rename to app/register/page.tsx diff --git a/lib/supabase/middleware.ts b/lib/supabase/middleware.ts deleted file mode 100644 index 302fe87..0000000 --- a/lib/supabase/middleware.ts +++ /dev/null @@ -1,59 +0,0 @@ -import { createServerClient } from "@supabase/ssr"; -import { NextResponse, type NextRequest } from "next/server"; - -// Middleware Supabase pour refresh des tokens auth -export async function updateSession(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) { - cookiesToSet.forEach(({ name, value }) => - request.cookies.set(name, value) - ); - supabaseResponse = NextResponse.next({ - request, - }); - cookiesToSet.forEach(({ name, value, options }) => - supabaseResponse.cookies.set(name, value, options) - ); - }, - }, - } - ); - - const { - data: { user }, - } = await supabase.auth.getUser(); - - // Rediriger vers login si pas connecté et route protégée - if ( - !user && - request.nextUrl.pathname.startsWith("/dashboard") - ) { - const url = request.nextUrl.clone(); - url.pathname = "/login"; - return NextResponse.redirect(url); - } - - // Rediriger vers dashboard si déjà connecté et sur login/register - if ( - user && - (request.nextUrl.pathname === "/login" || - request.nextUrl.pathname === "/register") - ) { - const url = request.nextUrl.clone(); - url.pathname = "/dashboard"; - return NextResponse.redirect(url); - } - - return supabaseResponse; -} diff --git a/middleware.ts b/middleware.ts deleted file mode 100644 index babfde2..0000000 --- a/middleware.ts +++ /dev/null @@ -1,97 +0,0 @@ -import { createServerClient } from "@supabase/ssr"; -import { NextResponse, type NextRequest } from "next/server"; - -export async function middleware(request: NextRequest) { - // Si les env vars Supabase ne sont pas configurees, laisser passer - const supabaseUrl = process.env.NEXT_PUBLIC_SUPABASE_URL; - const supabaseAnonKey = process.env.NEXT_PUBLIC_SUPABASE_ANON_KEY; - - if ( - !supabaseUrl || - !supabaseAnonKey || - supabaseUrl.includes("your-project") || - supabaseAnonKey === "your-anon-key" - ) { - // Pas de Supabase configure : rediriger les routes protegees vers login - const protectedPaths = ["/dashboard", "/formations", "/profil"]; - const isProtected = protectedPaths.some((p) => - request.nextUrl.pathname.startsWith(p) - ); - - if (isProtected) { - const url = request.nextUrl.clone(); - url.pathname = "/login"; - return NextResponse.redirect(url); - } - - return NextResponse.next(); - } - - try { - let supabaseResponse = NextResponse.next({ - request, - }); - - const supabase = createServerClient(supabaseUrl, supabaseAnonKey, { - cookies: { - getAll() { - return request.cookies.getAll(); - }, - setAll(cookiesToSet) { - cookiesToSet.forEach(({ name, value }) => - request.cookies.set(name, value) - ); - supabaseResponse = NextResponse.next({ - request, - }); - cookiesToSet.forEach(({ name, value, options }) => - supabaseResponse.cookies.set(name, value, options) - ); - }, - }, - }); - - const { - data: { user }, - } = await supabase.auth.getUser(); - - // Rediriger vers login si pas connecte et route protegee - if ( - !user && - (request.nextUrl.pathname.startsWith("/dashboard") || - request.nextUrl.pathname.startsWith("/formations") || - request.nextUrl.pathname.startsWith("/profil")) - ) { - const url = request.nextUrl.clone(); - url.pathname = "/login"; - return NextResponse.redirect(url); - } - - // Rediriger vers dashboard si deja connecte et sur login/register - if ( - user && - (request.nextUrl.pathname === "/login" || - request.nextUrl.pathname === "/register") - ) { - const url = request.nextUrl.clone(); - url.pathname = "/dashboard"; - return NextResponse.redirect(url); - } - - return supabaseResponse; - } catch (e) { - console.error("Middleware error:", e); - // En cas d'erreur, laisser passer la requete plutot que crasher - return NextResponse.next(); - } -} - -export const config = { - matcher: [ - "/dashboard/:path*", - "/formations/:path*", - "/profil/:path*", - "/login", - "/register", - ], -};