| |
|
|
| import { type NextRequest, NextResponse } from "next/server"; |
| import { createServerClient } from "@supabase/ssr"; |
|
|
| |
| const PROTECTED_PREFIXES = ["/dashboard"]; |
|
|
| |
| const AUTH_ROUTES = ["/login", "/signup"]; |
|
|
| export async function middleware(request: NextRequest) { |
| const { pathname } = request.nextUrl; |
|
|
| |
| 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, options }) => |
| 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(); |
|
|
| const isProtectedRoute = PROTECTED_PREFIXES.some((prefix) => |
| pathname.startsWith(prefix) |
| ); |
| const isAuthRoute = AUTH_ROUTES.some((route) => pathname.startsWith(route)); |
|
|
| |
| if (isProtectedRoute && !user) { |
| const homeUrl = new URL("/", request.url); |
| homeUrl.searchParams.set("redirectTo", pathname); |
| return NextResponse.redirect(homeUrl); |
| } |
|
|
| |
| if (isAuthRoute && user) { |
| return NextResponse.redirect(new URL("/dashboard", request.url)); |
| } |
|
|
| return supabaseResponse; |
| } |
|
|
| export const config = { |
| matcher: [ |
| |
| |
| |
| |
| |
| |
| |
| "/((?!_next/static|_next/image|favicon.ico|.*\\.(?:svg|png|jpg|jpeg|gif|webp)$).*)", |
| ], |
| }; |
|
|