Authentifizierung
Überblick
Abschnitt betitelt „Überblick“Das Modul client.auth übernimmt die Benutzerauthentifizierung, die Token-Verwaltung und die Persistenz von Sitzungen. Sobald sich ein Benutzer anmeldet, enthalten alle nachfolgenden Datenanfragen automatisch das JWT.
Das SDK persistiert Sitzungen standardmäßig im localStorage und aktualisiert Tokens automatisch, bevor sie ablaufen.
E-Mail / Passwort
Abschnitt betitelt „E-Mail / Passwort“Anmelden
Abschnitt betitelt „Anmelden“const { user, accessToken, refreshToken } = await client.auth.signInWithEmail( "user@example.com", "password");console.log(user.uid, user.email);Registrieren
Abschnitt betitelt „Registrieren“const { user } = await client.auth.signUp( "user@example.com", "password", "Jane Doe" // optional displayName);OAuth-Anbieter
Abschnitt betitelt „OAuth-Anbieter“Das SDK enthält dedizierte Methoden für gängige OAuth-Anbieter sowie ein generisches signInWithOAuth() für jeden benutzerdefinierten Anbieter.
Unterstützt drei Aufrufvarianten:
// ID-token flow (One Tap / Sign In With Google button)await client.auth.signInWithGoogle({ idToken: googleIdToken });
// Access-token flow (popup)await client.auth.signInWithGoogle({ accessToken: googleAccessToken });
// Authorization code flow (most secure, server-side exchange)await client.auth.signInWithGoogle({ code: authCode, redirectUri: "https://..." });Andere Anbieter
Abschnitt betitelt „Andere Anbieter“Jeder Anbieter folgt dem Authorization-Code-Flow mit (code, redirectUri):
await client.auth.signInWithGitHub(code, redirectUri);await client.auth.signInWithMicrosoft(code, redirectUri);await client.auth.signInWithFacebook(code, redirectUri);await client.auth.signInWithLinkedin(code, redirectUri);await client.auth.signInWithDiscord(code, redirectUri);await client.auth.signInWithGitLab(code, redirectUri);await client.auth.signInWithBitbucket(code, redirectUri);await client.auth.signInWithSlack(code, redirectUri);await client.auth.signInWithSpotify(code, redirectUri);Apple und Twitter erfordern zusätzliche Parameter:
// Apple — optional user info from first sign-inawait client.auth.signInWithApple(code, redirectUri, { name: { firstName: "Jane", lastName: "Doe" }, email: "jane@example.com"});
// Twitter — requires PKCE code verifierawait client.auth.signInWithTwitter(code, redirectUri, codeVerifier);Generisches OAuth
Abschnitt betitelt „Generisches OAuth“Für jeden im Backend registrierten Anbieter:
await client.auth.signInWithOAuth("custom-provider", { code: authCode, redirectUri: "https://myapp.com/callback"});Abmelden
Abschnitt betitelt „Abmelden“await client.auth.signOut();Dies widerruft das Refresh-Token auf dem Server, löscht die lokale Sitzung und löst ein SIGNED_OUT-Ereignis aus.
Sitzungsverwaltung
Abschnitt betitelt „Sitzungsverwaltung“Aktuelle Sitzung abrufen
Abschnitt betitelt „Aktuelle Sitzung abrufen“const session = client.auth.getSession();// { accessToken, refreshToken, expiresAt, user } | nullAktuellen Benutzer abrufen (servergeprüft)
Abschnitt betitelt „Aktuellen Benutzer abrufen (servergeprüft)“const user = await client.auth.getUser();// Fetches the user from the backend (GET /auth/me)Benutzerprofil aktualisieren
Abschnitt betitelt „Benutzerprofil aktualisieren“const updatedUser = await client.auth.updateUser({ displayName: "Jane Doe", photoURL: "https://example.com/avatar.jpg"});Token aktualisieren
Abschnitt betitelt „Token aktualisieren“Die Token-Aktualisierung erfolgt automatisch, Sie können sie aber auch manuell auslösen:
const session = await client.auth.refreshSession();Listener für den Authentifizierungsstatus
Abschnitt betitelt „Listener für den Authentifizierungsstatus“Reagieren Sie in Ihrer gesamten Anwendung auf Authentifizierungsänderungen:
const unsubscribe = client.auth.onAuthStateChange((event, session) => { // event: "SIGNED_IN" | "SIGNED_OUT" | "TOKEN_REFRESHED" | "USER_UPDATED" console.log("Auth event:", event); console.log("Session:", session?.user?.email);});
// Stop listeningunsubscribe();Passwortverwaltung
Abschnitt betitelt „Passwortverwaltung“Passwort vergessen
Abschnitt betitelt „Passwort vergessen“const { success, message } = await client.auth.resetPasswordForEmail( "user@example.com");Passwort zurücksetzen (mit Token)
Abschnitt betitelt „Passwort zurücksetzen (mit Token)“const { success, message } = await client.auth.resetPassword( resetToken, "newSecurePassword");Passwort ändern (authentifiziert)
Abschnitt betitelt „Passwort ändern (authentifiziert)“const { success, message } = await client.auth.changePassword( "oldPassword", "newPassword");E-Mail-Verifizierung
Abschnitt betitelt „E-Mail-Verifizierung“// Send verification email to the current userawait client.auth.sendVerificationEmail();
// Verify with the token from the email linkawait client.auth.verifyEmail(token);Sitzungsverwaltung (mehrere Geräte)
Abschnitt betitelt „Sitzungsverwaltung (mehrere Geräte)“// List all active sessionsconst sessions = await client.auth.getSessions();
// Revoke a specific sessionawait client.auth.revokeSession(sessionId);
// Revoke ALL sessions (logs out everywhere)await client.auth.revokeAllSessions();Authentifizierungskonfiguration
Abschnitt betitelt „Authentifizierungskonfiguration“Fragen Sie die Authentifizierungskonfiguration des Backends ab:
const config = await client.auth.getAuthConfig();// {// needsSetup: boolean,// registrationEnabled: boolean,// emailServiceEnabled?: boolean,// passwordReset?: boolean,// emailVerification?: boolean,// enabledProviders: string[]// }Benutzerdefinierter Sitzungsspeicher
Abschnitt betitelt „Benutzerdefinierter Sitzungsspeicher“Standardmäßig werden Sitzungen im localStorage gespeichert. Sie können dies mit der Option auth anpassen:
import { createRebaseClient, createCookieStorage } from "@rebasepro/client";
// Use cookies instead of localStorageconst client = createRebaseClient({ baseUrl: "http://localhost:3001", auth: { storage: createCookieStorage({ path: "/", sameSite: "Lax", secure: true }), autoRefresh: true, // default: true persistSession: true // default: true }});Form des User-Objekts
Abschnitt betitelt „Form des User-Objekts“// Canonical type — import from @rebasepro/typesinterface User { uid: string; email: string | null; displayName: string | null; photoURL: string | null; providerId: string; isAnonymous: boolean; emailVerified?: boolean; roles?: string[]; // text[] from the users table metadata?: Record<string, unknown>;}Nächste Schritte
Abschnitt betitelt „Nächste Schritte“- Daten abfragen — CRUD-Operationen und Query-Builder
- Echtzeit-Abonnements — Live-Daten mit WebSockets
- Authentifizierung im Backend — Serverseitige Authentifizierungskonfiguration
