Supabase Auth in der Praxis: E-Mail-Verifizierung, OAuth und Session-Management

Sie öffnen das Supabase Dashboard, klicken auf Authentication – und stehen vor einer Flut an Optionen. E-Mail-Verifizierung, Magic Link, OAuth, SSR-Konfiguration … Welche Methode passt? Wie richtet man sie ein?
Wenn Ihnen das bekannt vorkommt: Keine Sorge. Beim Login für ein kleines Projekt habe ich selbst einen halben Tag gebraucht, bis klar wurde, dass jede Auth-Methode ihren Einsatzbereich hat. Dieser Artikel führt die drei Kernwege von Supabase Auth zusammen: E-Mail-Verifizierung, OAuth-Integration und Session-Management – der Teil, der viele beschäftigt. Nach dem Lesen sollten Sie in etwa einer halben Stunde ein vollständiges Auth-System aufsetzen können.
E-Mail-Verifizierung – die grundlegende Auth-Methode
Ehrlich gesagt ist E-Mail-Verifizierung der einfachste, aber am leichtesten übersehene Teil von Supabase Auth.
Im Dashboard unter Authentication → Providers → Email finden Sie den Schalter „Confirm Email“. Er legt fest, ob Nutzer nach der Registrierung ihre E-Mail bestätigen müssen, bevor sie sich anmelden können. Bei gehosteten Projekten ist er standardmäßig aktiv: Nach der Registrierung erhalten Nutzer eine Bestätigungs-E-Mail und aktivieren das Konto per Link.
Bei meiner ersten Konfiguration habe ich ihn versehentlich deaktiviert. Ergebnis: Jede beliebige E-Mail-Adresse reichte zum Login, Spam-Accounts häuften sich. Seitdem weiß ich: In Produktion muss dieser Schalter an sein.
Der Code ist unkompliziert:
// E-Mail-Verifizierung bei der Registrierung auslösen
const { data, error } = await supabase.auth.signUp({
email: '[email protected]',
password: 'secure-password',
options: {
emailRedirectTo: 'https://yourapp.com/auth/callback'
}
})
Ein wichtiges Detail: der Parameter emailRedirectTo. Nach dem Klick auf den Link in der E-Mail leitet Supabase dorthin weiter – z. B. auf die Startseite oder eine Willkommensseite.
Zu E-Mail-Vorlagen: Supabase bringt Templates für Bestätigung, Passwort-Reset und Magic Link mit. Sie bearbeiten sie unter Email Templates im Dashboard. Eigenes SMTP (Resend, SendGrid) konfigurieren Sie über Auth Hooks – für den Einstieg reichen die Standard-Templates.
Ein häufiger Stolperstein: Lokal kann die E-Mail-Verifizierung hängen bleiben, weil die lokale Supabase-Instanz keine echten E-Mails versendet. Mit Mailcatcher Test-Mails ansehen – oder Confirm Email lokal vorübergehend deaktivieren und vor dem Go-live wieder aktivieren.
OAuth-Integration – Ein-Klick-Login
OAuth-Login verbessert die User Experience deutlich. Kein Passwort merken, ein Klick auf GitHub oder Google – die Conversion liegt oft über der klassischen E-Mail-Registrierung.
Supabase unterstützt viele OAuth Provider: GitHub, Google, Facebook, Apple, Azure, Twitter, Discord – insgesamt 15+. Am häufigsten nutze ich GitHub und Google; deren Setup ist am klarsten dokumentiert.
Für GitHub OAuth legen Sie zuerst eine OAuth App an (Settings → Developer settings → OAuth Apps → New OAuth App). Entscheidend ist die Callback URL:
https://<Ihr-Projekt-ref>.supabase.co/auth/v1/callback
Lokal verwenden Sie:
http://localhost:54321/auth/v1/callback
Client ID und Client Secret kopieren Sie ins Supabase Dashboard (Authentication → Providers → GitHub). Der Client-Aufruf ist dann simpel:
// GitHub OAuth Login
const { data, error } = await supabase.auth.signInWithOAuth({
provider: 'github',
options: {
redirectTo: 'https://yourapp.com/auth/callback'
}
})
Google OAuth folgt einem ähnlichen Ablauf, unterscheidet sich aber in einem Punkt: Google verlangt separate Client IDs für Web, iOS und Android. Unterstützen Sie Web und Mobile parallel, konfigurieren Sie beide.
Nach OAuth-Login liefert Supabase einen Provider Token. Damit rufen Sie APIs des Drittanbieters auf – z. B. GitHub-Repositories oder Google Drive. Praktisch, wenn Ihre App externe Dienste einbindet.
Typischer Fehler in der lokalen Entwicklung: falsche Callback URL. Ich hatte einmal Port 3000 (Frontend) statt 54321 (Supabase) eingetragen – Login endete mit Fehlerseite. Callback zeigt auf den Supabase-Port, nicht auf den Frontend-Port.
Session-Management – JWT und PKCE-Flow
Dieses Kapitel verwirrt am Anfang oft. Wie hängen JWT, Refresh Token und PKCE zusammen?
Eine Supabase-Session besteht aus zwei Teilen: Access Token (kurzlebiges JWT) und Refresh Token (langlebig). Der Access Token ist standardmäßig 1 Stunde gültig; offiziell mindestens 5 Minuten empfohlen – wegen Clock Skew. Der Refresh Token ist einmalig nutzbar und tauscht einen neuen Access Token ein.
Wichtiges Detail: Refresh Token haben ein 10-Sekunden-Wiederverwendungsfenster. In SSR-Umgebungen dürfen mehrere gleichzeitige Refresh-Anfragen innerhalb von 10 Sekunden erfolgen, ohne die Session zu beenden – sinnvoll, wenn Frontend und Backend parallel die Session bearbeiten.
PKCE: Mit Next.js oder anderen SSR-Frameworks ist PKCE Pflicht. Der Implicit Flow legt Tokens in der URL offen – in SSR unsicher. PKCE schützt den Austausch über einen Code Verifier.
PKCE erfordert zwei Parameter bei der Client-Initialisierung:
import { createClient } from '@supabase/supabase-js'
const supabase = createClient(SUPABASE_URL, SUPABASE_ANON_KEY, {
auth: {
detectSessionInUrl: true,
flowType: 'pkce'
}
})
Zusätzlich brauchen Sie eine Callback-Route für den Code-Austausch:
// Next.js App Router - app/auth/callback/route.ts
import { NextResponse } from 'next/server'
import { createClient } from '@/utils/supabase/server'
export async function GET(request: Request) {
const { searchParams, origin } = new URL(request.url)
const code = searchParams.get('code')
if (code) {
const supabase = await createClient()
const { error } = await supabase.auth.exchangeCodeForSession(code)
if (!error) {
return NextResponse.redirect(`${origin}/dashboard`)
}
}
return NextResponse.redirect(`${origin}/auth/error`)
}
Der Auth Code gilt 5 Minuten und ist nur einmal einlösbar. Schlägt der Austausch fehl, liegt es meist an Timeout oder doppelter Verwendung.
Supabase bietet drei Session-Limit-Modi: Time-boxed (feste Laufzeit, dann Abmeldung), Inactivity Timeout (Abmeldung bei Inaktivität) und Single Session per User (nur eine aktive Session pro Konto). Relevant für SOC 2- oder HIPAA-konforme Anwendungen.
Praxis-Tipps und häufige Fragen
Welche Auth-Methode passt?
Kurz: E-Mail-Verifizierung für Registrierung mit vollständigen Nutzerdaten; OAuth für schnellen Login (Developer Tools, B2B); Magic Link für passwortlose Szenarien (temporärer Zugriff, Mobile-first).
Vergleich der drei Methoden:
| Methode | Einsatzbereich | Vorteile | Nachteile |
|---|---|---|---|
| E-Mail-Verifizierung | Formelle Registrierung | Vollständige Daten, hohe Kontrolle | Passwort merken nötig |
| OAuth | Schneller Login | Kein Passwort, hohe Conversion | Abhängigkeit von Drittanbietern |
| Magic Link | Passwortlose Szenarien | Sicher, einfach | Jeder Login erfordert E-Mail-Check |
Checkliste für Next.js und andere SSR-Frameworks:
detectSessionInUrl: true– Session automatisch aus URL extrahierenflowType: 'pkce'– PKCE erzwingenredirectTokorrekt – Callback-Route muss Auth Code verarbeiten- Umgebungsvariablen – NEXT_PUBLIC_SUPABASE_URL und NEXT_PUBLIC_SUPABASE_ANON_KEY gesetzt
Häufige Fragen:
F: Warum schlägt OAuth lokal fehl?
Meist falsche Callback URL. Im Supabase Dashboard unter Provider prüfen: localhost-Adresse, nicht die Produktions-Domain.
F: Werden Nutzer nach JWT-Ablauf abgemeldet?
Der Client sollte automatisch refreshen. Der onAuthStateChange-Listener von Supabase übernimmt das – manuelles Refresh ist nicht nötig.
F: Session verschwindet plötzlich?
In SSR häufig. Server Client und Browser Client korrekt initialisiert? Werden Cookies zuverlässig weitergegeben?
Fazit
Die drei Auth-Wege von Supabase ergänzen sich: E-Mail-Verifizierung als Basis für formelle Registrierung, OAuth für schnellen Login, Session-Management als Fundament – JWT und PKCE müssen in SSR-Umgebungen sitzen.
Die typischen Fallstricke sind simpel: Callback URL falsch, Confirm Email vergessen, PKCE nicht konfiguriert. Diese Details klären, und Ihr Auth-System läuft stabil.
Nächster Schritt: Nach der Auth-Konfiguration Row Level Security (RLS) für Ihre Daten aktivieren. RLS und Auth sind eng verzahnt – jeder Nutzer sieht nur eigene Daten. Das schließt den Kreis für ein vollständiges Auth-System.
Supabase Auth vollständig konfigurieren
Von E-Mail-Verifizierung über OAuth-Integration bis zur PKCE-Konfiguration in SSR-Umgebungen
⏱️ Estimated time: 30 min
- 1
Step 1: E-Mail-Verifizierung aktivieren
Im Supabase Dashboard:
• Authentication → Providers → Email öffnen
• Confirm Email aktivieren
• emailRedirectTo auf die Callback-URL Ihrer App setzen
• Lokal mit Mailcatcher Test-E-Mails prüfen - 2
Step 2: GitHub OAuth konfigurieren
OAuth-Verbindung zwischen GitHub und Supabase einrichten:
• OAuth App in GitHub anlegen (Settings → Developer settings → OAuth Apps)
• Callback URL: https://<ref>.supabase.co/auth/v1/callback
• Lokal: http://localhost:54321/auth/v1/callback
• Client ID und Client Secret ins Supabase Dashboard kopieren - 3
Step 3: PKCE-Flow konfigurieren
Sicheren Auth-Flow für SSR-Umgebungen (Next.js):
• Beim Client-Init flowType: 'pkce' setzen
• detectSessionInUrl: true aktivieren
• /auth/callback-Route für Code-Austausch anlegen
• Auth Code gilt 5 Minuten und ist nur einmal nutzbar - 4
Step 4: Session-Refresh handhaben
Sessions dauerhaft gültig halten:
• Access Token läuft standardmäßig nach 1 Stunde ab
• Refresh Token ist einmalig nutzbar, 10-Sekunden-Wiederverwendungsfenster
• Client lauscht auf onAuthStateChange für automatischen Refresh
• In SSR-Umgebungen Cookies korrekt weitergeben
FAQ
Welche OAuth Provider unterstützt Supabase Auth?
Wie lange ist der JWT Access Token standardmäßig gültig?
Warum ist PKCE in SSR-Umgebungen Pflicht?
OAuth Callback schlägt in der lokalen Entwicklung fehl – was tun?
Was ist das Refresh-Token-Wiederverwendungsfenster?
Welche der drei Auth-Methoden wählen?
6 Min. Lesezeit · Veröffentlicht am: 8. Apr. 2026 · Aktualisiert am: 14. Juli 2026
Supabase in der Praxis
Wenn du über die Suche hier gelandet bist, kommst du am schnellsten weiter, indem du zum vorherigen oder nächsten Beitrag dieser Serie springst.
Vorheriger
Supabase-Datenbankdesign: Tabellenstruktur, Beziehungen und Row Level Security – vollständiger Leitfaden
Supabase-Datenbankdesign Best Practices: Namenskonventionen, drei Beziehungsmuster, Row Level Security (RLS) und Performance-Optimierung – mit Praxisbeispielen
Teil 2 von 10
Nächster
Supabase Storage in der Praxis: Upload, Berechtigungen und CDN-Beschleunigung
Lernen Sie den kompletten Supabase-Storage-Workflow – von Datei-Upload über Berechtigungskonfiguration bis zur CDN-Integration, inklusive RLS-Policies, Nutzerisolation, Smart CDN und Bildtransformation.
Teil 4 von 10
Ähnliche Beiträge
Supabase Einstieg: PostgreSQL + Auth + Storage als All-in-One-Backend

Supabase Einstieg: PostgreSQL + Auth + Storage als All-in-One-Backend
Supabase Realtime in der Praxis: Drei Modi im Vergleich und kollaborative Apps


Kommentare
Melde dich mit GitHub an, um einen Kommentar zu hinterlassen