import { NextRequest, NextResponse } from 'next/server'; import { getToken } from 'next-auth/jwt'; export async function middleware(request: NextRequest) { // Skip middleware for public paths if ( request.nextUrl.pathname.startsWith('/auth') || request.nextUrl.pathname.startsWith('/api/auth') || // CRITICAL: Allow NextAuth API routes request.nextUrl.pathname.startsWith('/_next') || request.nextUrl.pathname === '/favicon.ico' || request.nextUrl.pathname === '/sw.js' || request.nextUrl.pathname === '/manifest.webmanifest' ) { return NextResponse.next(); } // Check if user is authenticated using NextAuth const token = await getToken({ req: request, secret: process.env.NEXTAUTH_SECRET, }); // Redirect to login if not authenticated if (!token && !request.nextUrl.pathname.startsWith('/auth')) { const url = request.nextUrl.clone(); url.pathname = '/auth/login'; url.searchParams.set('callbackUrl', request.nextUrl.pathname); return NextResponse.redirect(url); } return NextResponse.next(); } export const config = { matcher: [ /* * Match all request paths except: * - api/auth/* (NextAuth endpoints) * - _next/static (static files) * - _next/image (image optimization) * - favicon.ico */ '/((?!_next/static|_next/image|favicon.ico).*)', ], };