diff --git a/src/middleware.ts b/src/middleware.ts index d815ec3..b4fda88 100644 --- a/src/middleware.ts +++ b/src/middleware.ts @@ -1,12 +1,40 @@ import createMiddleware from 'next-intl/middleware'; import { locales, defaultLocale } from './i18n/config'; +import { createClient } from '@/lib/supabase/middleware'; +import { NextRequest, NextResponse } from 'next/server'; -export default createMiddleware({ +const intlMiddleware = createMiddleware({ locales, defaultLocale, localePrefix: 'always', }); +export async function middleware(request: NextRequest) { + // Check if the request is for a protected dashboard route + const pathname = request.nextUrl.pathname; + const isDashboardRoute = pathname.match(/^\/(de|en|sr)\/dashboard/); + + if (isDashboardRoute) { + // Create Supabase client and check authentication + const { supabase, response } = await createClient(request); + const { data: { user } } = await supabase.auth.getUser(); + + // If not authenticated, redirect to login page with locale preserved + if (!user) { + const locale = pathname.split('/')[1]; + const loginUrl = new URL(`/${locale}/login`, request.url); + loginUrl.searchParams.set('returnUrl', pathname); + return NextResponse.redirect(loginUrl); + } + + // User is authenticated, continue with the response from Supabase client + return response; + } + + // For non-dashboard routes, use the intl middleware + return intlMiddleware(request); +} + export const config = { matcher: [ '/',