Übungsaufgaben für Auth.js v5
Drei Aufgaben, die aufeinander aufbauen — vom ersten Login bis zur geschützten Route mit Split-Config. Bau sie in einer frischen Next.js 15 App (App Router). Zu jeder Aufgabe gibt es einen KI-Review-Prompt: kopieren, deinen Code dranhängen, strukturiertes Feedback bekommen.
npx create-next-app@latest, dann npm install next-auth@beta und npx auth secret. Eine GitHub-OAuth-App ist in zwei Minuten angelegt — Callback-URL http://localhost:3000/api/auth/callback/github.Login-Flow zum Laufen bringen
●○○⏱ 45 minBring den kompletten Login-Kreislauf zum Laufen: zentrale auth.ts mit GitHub-Provider, der Catch-all-Route-Handler, die Env-Variablen, und ein Login- sowie Logout-Button als Server Action. Nach dem Klick landest du wieder auf der Startseite — diesmal eingeloggt.
- auth.ts exportiert handlers, signIn, signOut, auth
- Route-Handler liegt exakt unter app/api/auth/[...nextauth]/route.ts
- AUTH_SECRET + AUTH_GITHUB_ID/_SECRET in .env.local
- Login-Button ruft signIn("github") als inline Server Action
- Logout-Button ruft signOut() — nach Klick bist du ausgeloggt
Kopiere den Prompt in eine KI deiner Wahl und hänge deine auth.ts, den Route-Handler und die Button-Komponente an.
Session in drei Kontexten anzeigen
●●○⏱ 1 hZeig denselben eingeloggten Nutzer an drei Stellen: in einer Server Component (Profilseite), über einen Route Handler (GET /api/me gibt JSON zurück) und reaktiv im Client (ein Header-Avatar via useSession() mit SessionProvider). Achte darauf, welche Variante wo hingehört.
- Profilseite ist eine async Server Component mit await auth()
- Nicht-eingeloggt wird sauber behandelt (Hinweis statt Crash)
- /api/me ist mit auth((req) => ...) gewickelt und gibt 401 ohne Session
- SessionProvider wickelt die App in einer "use client"-Datei
- Avatar nutzt useSession() und behandelt den loading-Status
Kopiere den Prompt und hänge deine Profilseite, den /api/me-Handler, den Provider und die Avatar-Komponente an.
Geschützte Route mit Split-Config
●●●⏱ 1,5 hSchütze einen /dashboard-Bereich: ein authorized-Callback erlaubt ihn nur Eingeloggten, die Middleware setzt es durch. Lege die Config so an, dass sie auch mit einem DB-Adapter edge-tauglich bliebe — also als Split-Config (auth.config.ts + auth.ts), wobei die Middleware nur den edge-sicheren Kern lädt.
- authorized-Callback erlaubt /dashboard nur bei !!auth?.user
- auth.config.ts enthält Provider + Callbacks, KEINEN Adapter
- auth.ts spreizt ...authConfig und ergänzt (optional) den Adapter + strategy: "jwt"
- middleware.ts baut NextAuth(authConfig) — importiert NICHT @/auth
- matcher nimmt _next und statische Assets aus
- Ausgeloggt + /dashboard aufrufen leitet zum Login um
Kopiere den Prompt und hänge auth.config.ts, auth.ts, middleware.ts und eine /dashboard-Seite an.