app/action/getCurrentUser.ts
위치에 파일 생성<aside> 💡 서버 컴포넌트는 직접적으로 서버에서 실행되므로 DB에 직접 접근 가능. 즉 API 통신 없이 서버 컴포넌트에서 prisma로 DB에 접근하여 email에 해당하는 유저정보를 가져
</aside>
session.user.email
로 현재 로그인 된 유저의 이메일을 가져온다.import { getServerSession } from 'next-auth/next';
import { authOptions } from '@/pages/api/auth/[...nextauth]';
import prisma from '@/app/libs/prismadb';
export async function getSession() {
return await getServerSession(authOptions);
}
export default async function getCurrentUser() {
try {
const session = await getSession();
if (!session?.user?.email) {
return null;
}
// DB에서 실제로 조회해 오는 로직
const currentUser = await prisma.user.findUnique({
where: {
email: session.user.email as string,
},
});
if (!currentUser) {
return null;
}
return currentUser;
} catch (error: any) {
return null;
}
}
export default async function RootLayout({
children,
}: {
children: React.ReactNode;
}) {
const currentUser = await getCurrentUser();
return (
<html lang='en'>
<body className={font.className}>
<ClientOnly>
<ToasterProvider />
<LoginModal />
<RegisterModal />
{/* <Modal actionLabel='Submit' title='hello world' isOpen={true} /> */}
<NavBar currentUser={currentUser} />
</ClientOnly>
{children}
</body>
</html>
);
}