Files
PrintAuftrag-Portfolio/frontend/middleware.ts
2025-11-08 13:42:43 +01:00

40 lines
1.3 KiB
TypeScript

import { NextRequest, NextResponse } from "next/server";
import { decrypt } from "@/lib/session";
import { cookies } from "next/headers";
// Define all public routes here
const publicRoutes = ["/login"];
export default async function middleware(req: NextRequest) {
const path = req.nextUrl.pathname;
const isPublicRoute = publicRoutes.includes(path);
// Get the session cookie and decrypt it
const cookie = (await cookies()).get("session")?.value;
const session = await decrypt(cookie);
// If a user is NOT authenticated and is trying to access a PROTECTED route,
// redirect them to the login page.
if (!session?.user && !isPublicRoute) {
return NextResponse.redirect(new URL("/login", req.nextUrl));
}
// If a user IS authenticated and is trying to access a PUBLIC route (like /login),
// redirect them to a protected route (e.g., a dashboard or home page).
if (session?.user && isPublicRoute) {
return NextResponse.redirect(new URL("/dashboard", req.nextUrl));
}
if (session?.user && path == "/") {
return NextResponse.redirect(new URL("/dashboard", req.nextUrl));
}
// Otherwise, allow the request to proceed
return NextResponse.next();
}
// Routes Middleware should not run on
export const config = {
matcher: ["/((?!api|_next/static|_next/image|.*\\.png$).*)"],
};