Files
ACVE/lib/auth/requireUser.ts
2026-03-15 13:52:11 +00:00

34 lines
1.1 KiB
TypeScript
Executable File

import { createServerClient } from "@supabase/ssr";
import { cookies } from "next/headers";
import { db } from "@/lib/prisma";
import { UserRole } from "@prisma/client";
export async function requireUser() {
const cookieStore = await cookies();
const supabase = createServerClient(
process.env.NEXT_PUBLIC_SUPABASE_URL!,
process.env.NEXT_PUBLIC_SUPABASE_ANON_KEY!,
{ cookies: { getAll() { return cookieStore.getAll() } } }
);
const { data: { user } } = await supabase.auth.getUser();
if (!user) return null;
const profile = await db.profile.findUnique({ where: { id: user.id } }).catch((error) => {
console.error("Failed to load profile for authenticated user.", error);
return null;
});
if (profile) return profile;
// Keep authenticated flows working even if profile lookup fails.
return {
id: user.id,
email: user.email ?? "unknown@acve.local",
fullName: (user.user_metadata?.full_name as string | undefined) ?? null,
avatarUrl: null,
role: UserRole.LEARNER,
createdAt: new Date(0),
updatedAt: new Date(0),
};
}