init
This commit is contained in:
39
frontend/middleware.ts
Normal file
39
frontend/middleware.ts
Normal file
@@ -0,0 +1,39 @@
|
||||
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$).*)"],
|
||||
};
|
||||
Reference in New Issue
Block a user