51 lines
1.0 KiB
TypeScript
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,
|
|
},
|
|
},
|
|
},
|
|
});
|
|
}
|