Files
DetnalCare/lib/auth-session/get-session.ts
Iliyan Angelov 39077550ef Dental Care
2025-11-16 14:29:51 +02:00

44 lines
1.2 KiB
TypeScript

import { headers } from "next/headers";
import { cache } from "react";
import { auth } from "./auth";
import { prisma } from "@/lib/types/prisma";
/**
* Get the current session in a Server Component or Server Action
*
* Best practices:
* - Cached to avoid multiple lookups in the same request
* - Includes user role from database
* - Returns null if not authenticated
* - Use this in Server Components and Server Actions
*
* @returns The session object with user role or null if not authenticated
*/
export const getServerSession = cache(async () => {
try {
const session = await auth.api.getSession({ headers: await headers() });
if (!session || !session.user) {
return null;
}
// Fetch role from database if not in session
// Better Auth's session cache may not include custom fields
if (!session.user.role) {
const dbUser = await prisma.user.findUnique({
where: { id: session.user.id },
select: { role: true },
});
if (dbUser) {
session.user.role = dbUser.role || "patient";
}
}
return session;
} catch (error) {
console.error("[getServerSession] Error:", error);
return null;
}
});