init app
This commit is contained in:
44
proxy.ts
Normal file
44
proxy.ts
Normal file
@@ -0,0 +1,44 @@
|
||||
import { NextResponse } from "next/server";
|
||||
import type { NextRequest } from "next/server";
|
||||
import { decryptSessionId } from "@/lib/crypto";
|
||||
import { prisma } from "@/lib/prisma";
|
||||
|
||||
const publicRoutes = ["/login", "/forgot-password", "/reset-password"];
|
||||
|
||||
export async function proxy(request: NextRequest) {
|
||||
const path = request.nextUrl.pathname;
|
||||
const isPublicRoute = publicRoutes.some((r) => path.startsWith(r));
|
||||
|
||||
// Read session cookie directly from request (synchronous in proxy)
|
||||
const sessionCookie = request.cookies.get("session")?.value;
|
||||
|
||||
let isAuthenticated = false;
|
||||
|
||||
if (sessionCookie) {
|
||||
const sessionId = decryptSessionId(sessionCookie);
|
||||
if (sessionId) {
|
||||
const session = await prisma.session.findUnique({
|
||||
where: { id: sessionId },
|
||||
});
|
||||
if (session && session.expiresAt > new Date()) {
|
||||
isAuthenticated = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Redirect unauthenticated users away from protected routes
|
||||
if (!isAuthenticated && !isPublicRoute) {
|
||||
return NextResponse.redirect(new URL("/login", request.url));
|
||||
}
|
||||
|
||||
// Redirect authenticated users away from auth pages
|
||||
if (isAuthenticated && isPublicRoute) {
|
||||
return NextResponse.redirect(new URL("/", request.url));
|
||||
}
|
||||
|
||||
return NextResponse.next();
|
||||
}
|
||||
|
||||
export const config = {
|
||||
matcher: ["/((?!api|_next/static|_next/image|favicon.ico|.*\\.png$).*)"],
|
||||
};
|
||||
Reference in New Issue
Block a user