React Academy · Les

Sessiebeheer en de useSession-hook

Open sessiegegevens in server- en clientcomponenten en beveilig pagina's op basis van de auth-status.

Les 2 van 412 stappen

Sessiebeheer en de useSession-hook is een gratis React Academy-les op CoddyKit. Dit is les 2 van 4. Je kunt de volledige les hieronder gratis lezen en daarna in de browser praktisch oefenen met een ingebouwde code-editor en een AI-begeleider die 24/7 beschikbaar is. Deze les maakt deel uit van het leertraject React Academy. Je voortgang wordt gesynchroniseerd op het web en in de CoddyKit-app. De cursus React Academy bevat in totaal 4 lessen.

Sessietypen in Auth.js

Auth.js ondersteunt twee sessiestrategieën: JWT, de standaard, met een staatloze token in een cookie, en database, met een sessierecord in een database dat je aan de serverkant ongeldig kunt maken.

useSession in Client Components

useSession() is een hook voor Client Components die de huidige sessie leest. De hook retourneert data, de sessie, status ('loading' | 'authenticated' | 'unauthenticated') en een functie update.

'use client';
import { useSession } from 'next-auth/react';

export function UserAvatar() {
  const { data: session, status } = useSession();
  if (status === 'loading') return <Spinner />;
  if (status === 'unauthenticated') return <Link href="/login">Sign in</Link>;
  return <img src={session.user?.image ?? ''} alt={session.user?.name ?? ''} />;
}

SessionProvider instellen

Omhul je app, of een deelboom van een Client Component, met SessionProvider, zodat useSession toegang heeft tot de sessiecontext.

// app/providers.tsx
'use client';
import { SessionProvider } from 'next-auth/react';

export function Providers({ children }: { children: React.ReactNode }) {
  return <SessionProvider>{children}</SessionProvider>;
}

// app/layout.tsx
import { Providers } from './providers';
export default function RootLayout({ children }) {
  return <html><body><Providers>{children}</Providers></body></html>;
}

auth() in Server Components

Gebruik voor Server Components rechtstreeks auth() — je hebt geen hook of provider nodig. De functie leest de sessie uit de cookie aan de serverkant.

import { auth } from '@/auth';

export default async function Header() {
  const session = await auth();
  return (
    <nav>
      {session ? (
        <span>Hello, {session.user?.name}</span>
      ) : (
        <Link href="/login">Sign in</Link>
      )}
    </nav>
  );
}

Client-routes beveiligen

Gebruik useSession met de optie required: true om niet-geauthenticeerde gebruikers automatisch naar de aanmeldpagina door te sturen.

'use client';
import { useSession } from 'next-auth/react';

export default function ProtectedPage() {
  const { data: session } = useSession({ required: true });
  // session is never null here — unauthenticated users are redirected
  return <div>Welcome, {session?.user?.name}</div>;
}

De sessie bijwerken

Roep de functie update() aan die door useSession wordt geretourneerd om de sessie te vernieuwen, bijvoorbeeld na het bijwerken van een profiel, zonder je af te melden en opnieuw aan te melden.

const { data: session, update } = useSession();

async function handleNameChange(newName: string) {
  await updateUserName(newName); // API call
  await update({ user: { name: newName } }); // refresh session
}

JWT-sessiecallbacks

Gebruik de jwt-callback om bij het aanmelden aangepaste gegevens aan de JWT-token toe te voegen en de session-callback om deze gegevens beschikbaar te maken in het sessieobject.

callbacks: {
  async jwt({ token, user }) {
    if (user) token.role = user.role; // add on first sign-in
    return token;
  },
  async session({ session, token }) {
    session.user.role = token.role as string;
    return session;
  },
},

Verloop van sessies

Configureer de maximale levensduur van een sessie in de Auth.js-configuratie. JWT-sessies worden bij elke actieve aanvraag automatisch vernieuwd.

export const { handlers, auth } = NextAuth({
  session: {
    strategy: 'jwt',
    maxAge: 30 * 24 * 60 * 60, // 30 days
    updateAge: 24 * 60 * 60,   // refresh if older than 1 day
  },
});

Databasesessies ongeldig maken

Je kunt databasesessies aan de serverkant intrekken, wat handig is voor gedwongen afmelden. Verwijder het sessierecord uit de database om de sessie onmiddellijk ongeldig te maken.

// Server Action to log out all devices:
async function logOutAllDevices() {
  'use server';
  const session = await auth();
  if (session) await db.session.deleteMany({ where: { userId: session.user.id } });
  redirect('/login');
}

Toegang op basis van rollen in Client Components

Lees de rol van de sessie uit useSession en geef de gebruikersinterface op basis daarvan voorwaardelijk weer.

const { data: session } = useSession();
const isAdmin = session?.user?.role === 'admin';

return (
  <>
    {isAdmin && <AdminPanel />}
    <UserContent />
  </>
);

Korte controle

Welke provider moet je rond je app plaatsen om useSession() in Client Components te laten werken?

Samenvatting

Gebruik auth() voor toegang tot sessies in Server Components en useSession() in Client Components die zijn omhuld door SessionProvider. Voeg aangepaste gegevens toe via JWT- en sessiecallbacks, werk sessies aan de clientkant bij met update() en configureer maxAge voor het verlopen van sessies.

Gratis beginnen

Leer React met een AI-tutor — gratis

Schrijf echte code en voer die uit in je browser, krijg direct hulp van een AI-tutor die 24/7 beschikbaar is en ga verder waar je gebleven bent op het web of in de app.

Cursussen
88
Lessen
324

Veelgestelde vragen

Is de les “Sessiebeheer en de useSession-hook” gratis?

Ja — de volledige tekst van “Sessiebeheer en de useSession-hook” kun je hier gratis op het web lezen. Als je interactief wilt oefenen met een ingebouwde code-editor en een AI-begeleider die 24/7 beschikbaar is, en de rest van de cursus React Academy wilt ontgrendelen, kun je upgraden naar CoddyKit PRO. De cursus React Academy bevat in totaal 4 lessen.

Wat leer ik in “Sessiebeheer en de useSession-hook”?

Open sessiegegevens in server- en clientcomponenten en beveilig pagina's op basis van de auth-status. Je oefent met React Academy door code rechtstreeks in de browser uit te voeren. Een AI-begeleider die 24/7 beschikbaar is beantwoordt je vragen terwijl je de les doorwerkt.

Heb ik ervaring nodig om met React Academy te beginnen?

Ervaring vooraf is niet nodig. React Academy op CoddyKit is opgebouwd voor beginners tot gevorderden, zodat je hier of bij het begin kunt starten en in je eigen tempo kunt leren. Dit is les 2 van 4.

Hoe lang duurt de les “Sessiebeheer en de useSession-hook”?

De meeste lessen van CoddyKit duren ongeveer 5–10 minuten. Elke les is kort en interactief, zodat je gestaag vooruitgaat en op het web en in de app precies verdergaat waar je was gebleven.

Kan ik code schrijven en uitvoeren in deze les over React Academy?

Ja. Elke les over React Academy bevat een ingebouwde code-editor, zodat je rechtstreeks in je browser echte code kunt schrijven en uitvoeren en direct feedback van AI krijgt — lokale installatie is niet nodig.

Alle lessen in deze cursus

  1. Auth.js instellen in de Next.js App Router
  2. Sessiebeheer en de useSession-hook
  3. Credentials Provider en aangepaste login
  4. Routebeveiliging op basis van middleware
← Terug naar React Academy