Authenticatie in Next.js: Auth.js vs Better Auth vs Clerk | We.Inc
Vergelijk Auth.js, Better Auth, Clerk, Supabase Auth en een eigen sessie voor Next.js 16, met setupcode per optie en een keuzehulp die de lijst afstemt op uw eisen.
Authenticatie in Next.js: opties vergeleken
Kies voor de meeste Next.js-apps een library in plaats van zelf authenticatie te schrijven. Clerk is gehost en het snelst opgezet, Supabase Auth past bij apps die al op Supabase draaien, en Better Auth of Auth.js houden gebruikers in uw eigen database. Wat u ook kiest, controleer de sessie opnieuw in servercode, want controles in de proxy alleen beschermen geen data.
In één oogopslag
Optie
Waar gebruikers staan
Clerk
Servers van Clerk
@clerk/nextjs, ClerkProvider, clerkMiddleware in proxy.ts
Supabase Auth
Uw Supabase-project
@supabase/ssr-clients plus een proxy die de sessie ververst
Better Auth
Uw eigen database
auth-instantie plus app/api/auth/[...all]/route.ts
Auth.js (next-auth v5 beta)
Uw database of een JWT-cookie
auth.ts plus app/api/auth/[...nextauth]/route.ts
Zelf bouwen
Uw eigen database
jose of iron-session, httpOnly-cookies, een data access layer
De officiële Next.js-gids noemt twaalf compatibele auth-libraries, meer keuze dan de meeste mensen willen. Deze vergelijking brengt het terug tot de vijf routes die de meeste teams echt afwegen, toont de minimale code voor elk in de App Router en legt uit welke controles u uw app nog steeds verschuldigd bent, welke library mensen ook inlogt.
Vink de eisen aan die voor u belangrijk zijn, zoals gebruikersgegevens in uw eigen database houden of kant-en-klare inlogschermen krijgen.
De keuzehulp verbergt opties die niet aan elke aangevinkte eis voldoen.
Open de setupcode van de overgebleven opties en vergelijk hoeveel u zou moeten schrijven.
Lees het onderdeel over beveiliging voordat u live gaat, welke optie u ook kiest.
Bewaar sessies in cookies die op de server worden gezet met HttpOnly, Secure, SameSite en een vervaldatum, zoals de Next.js-gids aanraadt.
Zet een functie verifySession() in één bestand dat alleen op de server draait, en roep die aan vanuit pagina's, Server Actions en Route Handlers.
Vertrouw voor auth-controles niet op een layout. Layouts worden bij navigatie aan de clientkant niet opnieuw gerenderd, dus de controle kan worden overgeslagen.
Houd de sessiepayload klein: een gebruikers-id en rol, nooit een e-mailadres of telefoonnummer.
Genereer secrets met openssl rand -base64 32 (of npx auth secret voor Auth.js) en bewaar ze in omgevingsvariabelen.
Veelgestelde vragen
Wordt NextAuth nog onderhouden?
Auth.js, het project dat vroeger NextAuth heette, zegt op zijn eigen site dat het nu onderdeel is van Better Auth. Het installatiecommando voor Next.js is nog steeds npm install next-auth@beta. Nieuwe projecten beginnen vaak direct met Better Auth, terwijl bestaande Auth.js-apps gewoon blijven werken.
Kan ik pagina's alleen met proxy.ts beveiligen?
Nee. De Next.js-documentatie noemt controles in de proxy optimistisch: goed voor snelle omleidingen op basis van een cookie, maar geen beveiligingsgrens. Controleer de sessie opnieuw dicht bij de data, want Server Functions en routes buiten de matcher komen nooit langs de proxy.
Welke optie is het goedkoopst?
Libraries die gebruikers in uw eigen database bewaren, zoals Better Auth of Auth.js, rekenen geen kosten per gebruiker; u betaalt voor uw database en het versturen van e-mail. Supabase Auth bevat per oktober 2026 50,000 maandelijks actieve gebruikers in het gratis abonnement. Kijk op de prijspagina van Clerk voor de huidige gratis limiet.
Werken deze met Next.js 16?
Ja. Clerk en Supabase documenteren allebei proxy.ts voor Next.js 16 en middleware.ts voor oudere versies, en Better Auth biedt een cookiehelper voor de proxy plus een volledige sessiecontrole voor servercode.
Stateless sessies of sessies in de database?
Een ondertekende cookie (stateless) is eenvoudiger en vraagt geen opzoeking, maar u kunt hem niet intrekken voordat hij verloopt. Een databasesessie kost een query per controle en laat gebruikers op elk apparaat uitloggen. Bij veel libraries kunt u kiezen.
Gehost versus zelf gehost
Clerk beheert voor u de gebruikersopslag, inlogpagina's en sessieafhandeling, en u zet de componenten gewoon in uw layout. U ruilt wat controle en op schaal een maandelijkse rekening in voor snelheid en een verzorgde interface vanaf dag één.
Better Auth en Auth.js draaien binnen uw app en schrijven naar uw database. De data en de schermen zijn van u, maar u bent ook verantwoordelijk voor e-mailbezorging, wachtwoordherstel en upgrades.
Als u Supabase al gebruikt
Supabase Auth koppelt inloggen direct aan row level security in Postgres, dus een policy als auth.uid() = user_id beschermt data op databaseniveau. Het pakket @supabase/ssr bewaart de sessie in cookies, zodat Server Components die kunnen lezen.
De documentatie van Supabase waarschuwt dat getSession() ongeverifieerde data teruggeeft. Gebruik getClaims(), dat de handtekening van het token controleert, of getUser(), dat de auth-server raadpleegt, voordat u vertrouwt wie de gebruiker is.
Zelf schrijven
De Next.js-gids loopt het door met een Server Action voor het formulier, Zod voor validatie, bcrypt voor hashing en jose om een sessiecookie van zeven dagen te ondertekenen. Het is een goede manier om de onderdelen te leren kennen.
Voor productie raadt dezelfde gids een library aan, omdat rate limiting, e-mailverificatie, het koppelen van accounts en inloggen met meerdere factoren snel oplopen.
Minimale setup per optie
Clerk
Installeer @clerk/nextjs en stel NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY en CLERK_SECRET_KEY in. In Next.js 16 heet het middlewarebestand proxy.ts.
Supabase Auth
Een serverclient die per verzoek wordt opgebouwd uit de cookieopslag, met de publishable key. getClaims() verifieert het token voordat u het vertrouwt.
Better Auth
Koppel de handler aan een catch-all route en lees de sessie daarna op de server met de request headers.
Auth.js (next-auth v5 beta)
auth.ts exporteert handlers, auth, signIn en signOut. Stel AUTH_SECRET in (npx auth secret maakt er een).
Uw eigen ondertekende sessiecookie
Een korte versie van het patroon uit de Next.js-gids: jose ondertekent de payload en de cookie is HttpOnly, Secure en SameSite=Lax.
Waar u de sessie controleert
Auth-controles per plek (uit de Next.js-gids over authenticatie)
Plek
Soort controle
Waarom
Optimistisch, alleen de cookie
Snelle omleidingen; draait vóór het renderen, ook bij prefetches
Data access layer
Veilig
Eén verifySession() waar elke datalezing langs gaat
Server Actions
Veilig
Behandeld als openbare endpoints; controleer de rol voordat u iets wijzigt
Route Handlers
Veilig
401 als iemand is uitgelogd, 403 als de rol niet klopt
Layouts
Vermijden
Niet opnieuw gerenderd bij navigatie, dus controles kunnen worden overgeslagen
Clerk
Het snelst naar een werkende inlogpagina; gebruikers staan bij Clerk.
Supabase Auth
Gebruikers staan in uw Supabase Postgres; betaalde abonnementen rekenen extra gebruikers boven de inbegrepen hoeveelheid.
Better Auth
Library in uw app, schrijft naar uw database, plugins voor extra's.
Al lang bestaande optie, nu onderdeel van Better Auth; v5 wordt nog als beta gepubliceerd.
Zelf bouwen
Volledige controle; u schrijft elke flow en houdt hem veilig.
Gebruikersgegevens blijven in een database die ik beheer
Kant-en-klare inlog- en profielschermen
Geen kosten per gebruiker bij de auth-aanbieder
Inloggen gekoppeld aan row level security in Postgres
Keuzehulp voor authenticatie
Vink de eisen aan die ertoe doen; de lijst houdt alleen de opties over die aan alle eisen voldoen.
Eisen
Geen enkele optie voldoet aan elke aangevinkte eis. Vink er een uit om te vergelijken.