geraete/lib/auth.ts
2025-11-17 15:26:43 +01:00

51 lines
1.0 KiB
TypeScript

// lib/auth.ts
'use server';
import { getServerSession } from 'next-auth';
import { authOptions } from './auth-options';
import { prisma } from './prisma';
type SessionUser = {
id?: string;
email?: string | null;
name?: string | null;
};
export async function getCurrentUserId(): Promise<string | null> {
const session = await getServerSession(authOptions);
const user = session?.user as SessionUser | undefined;
// 1) ID direkt aus dem Token
if (user?.id) {
return user.id;
}
// 2) Fallback über E-Mail aus der Session
if (user?.email) {
const dbUser = await prisma.user.findUnique({
where: { email: user.email },
select: { id: true },
});
if (dbUser) return dbUser.id;
}
// 3) keine Session -> kein User
return null;
}
export async function getCurrentUser() {
const id = await getCurrentUserId();
if (!id) return null;
return prisma.user.findUnique({
where: { id },
include: {
roles: {
include: {
role: true,
},
},
},
});
}