Back
Syntax
Study
Editor
Mode:
HTML
CSS
JavaScript
PHP
Reset
Run »
HTML / CSS / JS
// lib/auth.ts — cached auth check shared across Server Components import { cache } from 'react'; import { cookies } from 'next/headers'; import { verifySession } from '@/lib/session'; // cache() ensures this runs at most once per request // even if called from multiple Server Components export const getUser = cache(async () => { const cookieStore = cookies(); const sessionToken = cookieStore.get('session')?.value; if (!sessionToken) return null; const session = await verifySession(sessionToken); return session?.user ?? null; }); // app/dashboard/page.tsx import { getUser } from '@/lib/auth'; import { redirect } from 'next/navigation'; export default async function DashboardPage() { const user = await getUser(); // cached — no duplicate DB query if (!user) redirect('/login'); return <h1>Welcome, {user.name}</h1>; } // app/dashboard/layout.tsx import { getUser } from '@/lib/auth'; export default async function DashboardLayout({ children, }: { children: React.ReactNode; }) { const user = await getUser(); // same cached call — no extra query return ( <div> <nav>Logged in as {user?.email}</nav> {children} </div> ); }
Result
Open