Study/src/middleware.ts
Elijah b7ce314f01
Some checks failed
Automated Container Build / build-and-push (push) Failing after 7s
Initial working commit
2026-06-27 19:19:38 -07:00

49 lines
1.2 KiB
TypeScript

import { NextRequest, NextResponse } from "next/server";
import { getIronSession } from "iron-session";
import type { SessionData } from "@/lib/auth";
const sessionOptions = {
password:
process.env.SESSION_SECRET ||
"dev-session-secret-change-in-production-must-be-32-chars",
cookieName: "study-app-session",
};
// Routes that don't require authentication
const publicPaths = ["/login", "/api/auth", "/shared"];
export async function middleware(request: NextRequest) {
const { pathname } = request.nextUrl;
// Allow public routes
if (publicPaths.some((path) => pathname.startsWith(path))) {
return NextResponse.next();
}
// Allow static assets and Next.js internals
if (
pathname.startsWith("/_next") ||
pathname.startsWith("/favicon") ||
pathname.includes(".")
) {
return NextResponse.next();
}
// Check session
const response = NextResponse.next();
const session = await getIronSession<SessionData>(
request,
response,
sessionOptions
);
if (!session.isAuthenticated) {
return NextResponse.redirect(new URL("/login", request.url));
}
return response;
}
export const config = {
matcher: ["/((?!_next/static|_next/image|favicon.ico).*)"],
};