Files
MIS-Contro-Tower/lib/auth/requireSession.ts
2026-01-03 20:18:39 +00:00

44 lines
1.0 KiB
TypeScript

import { cookies } from "next/headers";
import { prisma } from "@/lib/prisma";
const COOKIE_NAME = "mis_session";
export async function requireSession() {
const jar = await cookies();
const sessionId = jar.get(COOKIE_NAME)?.value;
if (!sessionId) return null;
const session = await prisma.session.findFirst({
where: {
id: sessionId,
revokedAt: null,
expiresAt: { gt: new Date() },
},
include: {
user: {
select: { isActive: true, emailVerifiedAt: true },
},
},
});
if (!session) return null;
if (!session.user?.isActive || !session.user?.emailVerifiedAt) {
await prisma.session
.update({ where: { id: session.id }, data: { revokedAt: new Date() } })
.catch(() => {});
return null;
}
// Optional: update lastSeenAt (useful later)
await prisma.session
.update({ where: { id: session.id }, data: { lastSeenAt: new Date() } })
.catch(() => {});
return {
sessionId: session.id,
userId: session.userId,
orgId: session.orgId,
};
}