NextAuth.js v5 mit Claude Code: OAuth und Session Management 2026
NextAuth.js v5 (jetzt Auth.js) ist die Standard-Auth-Lösung für Next.js — OAuth Provider, Credentials, Database Adapter, JWT/Database Sessions und App Router Integration. Claude Code konfiguriert vollständige Auth-Systeme in Minuten.
NextAuth v5 Setup: auth.ts Konfiguration
SetupGrundkonfiguration mit App Router
# Prompt: "Konfiguriere NextAuth v5 mit Google, GitHub OAuth und Prisma Adapter"
// auth.ts — Claude Code generiert zentrale Auth-Konfiguration:
import NextAuth from 'next-auth'
import Google from 'next-auth/providers/google'
import GitHub from 'next-auth/providers/github'
import { PrismaAdapter } from '@auth/prisma-adapter'
import { db } from '@/lib/db'
export const { handlers, auth, signIn, signOut } = NextAuth({
adapter: PrismaAdapter(db),
providers: [
Google({
clientId: process.env.GOOGLE_CLIENT_ID!,
clientSecret: process.env.GOOGLE_CLIENT_SECRET!
}),
GitHub({
clientId: process.env.GITHUB_CLIENT_ID!,
clientSecret: process.env.GITHUB_CLIENT_SECRET!
})
],
session: { strategy: 'database' }, // oder 'jwt'
callbacks: {
async session({ session, user }) {
session.user.id = user.id // User-ID zur Session hinzufügen
session.user.role = user.role // Custom Felder (Prisma User-Schema)
return session
}
},
pages: {
signIn: '/auth/login', // Custom Login Page
error: '/auth/error'
}
})
// app/api/auth/[...nextauth]/route.ts:
export { handlers as GET, handlers as POST } from '@/auth'
Credentials Provider: Email + Password
CredentialsEigenes Login-Formular
# Prompt: "Füge Email/Password Login mit bcrypt hinzu"
import Credentials from 'next-auth/providers/credentials'
import bcrypt from 'bcryptjs'
import { z } from 'zod'
Credentials({
async authorize(credentials) {
// Zod Validation
const parsed = z.object({
email: z.string().email(),
password: z.string().min(8)
}).safeParse(credentials)
if (!parsed.success) return null
const user = await db.user.findUnique({
where: { email: parsed.data.email }
})
if (!user?.passwordHash) return null
const passwordMatch = await bcrypt.compare(
parsed.data.password,
user.passwordHash
)
if (!passwordMatch) return null
return { id: user.id, email: user.email, name: user.name }
}
})
Credentials + Database Adapter: Credentials Provider funktioniert NUR mit JWT-Strategy, nicht mit Database Sessions. Claude Code warnt automatisch vor diesem häufigen Konfigurations-Fehler.
Middleware: Routen schützen
MiddlewareAutomatischer Auth-Schutz
// middleware.ts — Root-Level, schützt alle Routen:
export { auth as middleware } from '@/auth'
export const config = {
matcher: [
// Alle Routen außer public
'/((?!api/auth|_next/static|_next/image|favicon.ico|login|signup).*)'
]
}
// Erweiterte Middleware mit Rollen:
export default auth(async (req) => {
const session = req.auth
const isLoggedIn = !!session
if (!isLoggedIn) {
return Response.redirect(new URL('/login', req.url))
}
// Admin-Bereich: nur für Admins
if (req.nextUrl.pathname.startsWith('/admin') &&
session.user.role !== 'admin') {
return Response.redirect(new URL('/403', req.url))
}
})
// In Server Components: Session lesen
import { auth } from '@/auth'
const session = await auth() // null wenn nicht eingeloggt
NextAuth-Prompt: "Konfiguriere NextAuth v5 mit Google OAuth, Prisma Adapter, JWT-Sessions und Middleware für geschützte /dashboard Routen. Ergänze TypeScript Types für Custom Session Fields."
Auth-Modul im Kurs
Im Claude Code Mastery Kurs: vollständiges NextAuth v5 Modul — OAuth, Credentials, JWT vs. Database Sessions, Adapter, Middleware und Role-Based Access Control.
14 Tage kostenlos testen →