Autenticazione
Panoramica
Sezione intitolata “Panoramica”Il modulo client.auth gestisce l’autenticazione degli utenti, la gestione dei token e la persistenza delle sessioni. Una volta che un utente ha effettuato l’accesso, tutte le successive richieste di dati includono automaticamente il JWT.
L’SDK mantiene le sessioni nel localStorage per impostazione predefinita e aggiorna automaticamente i token prima della loro scadenza.
Email / Password
Sezione intitolata “Email / Password”Accesso
Sezione intitolata “Accesso”const { user, accessToken, refreshToken } = await client.auth.signInWithEmail( "user@example.com", "password");console.log(user.uid, user.email);Registrazione
Sezione intitolata “Registrazione”const { user } = await client.auth.signUp( "user@example.com", "password", "Jane Doe" // optional displayName);Provider OAuth
Sezione intitolata “Provider OAuth”L’SDK include metodi dedicati per i provider OAuth più diffusi, oltre a un signInWithOAuth() generico per qualsiasi provider personalizzato.
Supporta tre stili di invocazione:
// 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://..." });Altri Provider
Sezione intitolata “Altri Provider”Ogni provider segue il flusso del codice di autorizzazione con (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 e Twitter richiedono parametri aggiuntivi:
// 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);OAuth Generico
Sezione intitolata “OAuth Generico”Per qualsiasi provider registrato sul backend:
await client.auth.signInWithOAuth("custom-provider", { code: authCode, redirectUri: "https://myapp.com/callback"});Disconnessione
Sezione intitolata “Disconnessione”await client.auth.signOut();Questo revoca il refresh token sul server, cancella la sessione locale ed emette un evento SIGNED_OUT.
Gestione delle Sessioni
Sezione intitolata “Gestione delle Sessioni”Ottenere la Sessione Corrente
Sezione intitolata “Ottenere la Sessione Corrente”const session = client.auth.getSession();// { accessToken, refreshToken, expiresAt, user } | nullOttenere l’Utente Corrente (Verificato dal Server)
Sezione intitolata “Ottenere l’Utente Corrente (Verificato dal Server)”const user = await client.auth.getUser();// Fetches the user from the backend (GET /auth/me)Aggiornare il Profilo Utente
Sezione intitolata “Aggiornare il Profilo Utente”const updatedUser = await client.auth.updateUser({ displayName: "Jane Doe", photoURL: "https://example.com/avatar.jpg"});Aggiornare il Token
Sezione intitolata “Aggiornare il Token”L’aggiornamento del token avviene automaticamente, ma puoi attivarlo manualmente:
const session = await client.auth.refreshSession();Listener dello Stato di Autenticazione
Sezione intitolata “Listener dello Stato di Autenticazione”Reagisci ai cambiamenti di autenticazione in tutta la tua applicazione:
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();Gestione delle Password
Sezione intitolata “Gestione delle Password”Password Dimenticata
Sezione intitolata “Password Dimenticata”const { success, message } = await client.auth.resetPasswordForEmail( "user@example.com");Reimpostare la Password (con Token)
Sezione intitolata “Reimpostare la Password (con Token)”const { success, message } = await client.auth.resetPassword( resetToken, "newSecurePassword");Cambiare la Password (Autenticato)
Sezione intitolata “Cambiare la Password (Autenticato)”const { success, message } = await client.auth.changePassword( "oldPassword", "newPassword");Verifica dell’Email
Sezione intitolata “Verifica dell’Email”// Send verification email to the current userawait client.auth.sendVerificationEmail();
// Verify with the token from the email linkawait client.auth.verifyEmail(token);Gestione delle Sessioni (Multi-Dispositivo)
Sezione intitolata “Gestione delle Sessioni (Multi-Dispositivo)”// 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();Configurazione dell’Autenticazione
Sezione intitolata “Configurazione dell’Autenticazione”Interroga la configurazione di autenticazione del backend:
const config = await client.auth.getAuthConfig();// {// needsSetup: boolean,// registrationEnabled: boolean,// emailServiceEnabled?: boolean,// passwordReset?: boolean,// emailVerification?: boolean,// enabledProviders: string[]// }Archiviazione della Sessione Personalizzata
Sezione intitolata “Archiviazione della Sessione Personalizzata”Per impostazione predefinita, le sessioni vengono archiviate nel localStorage. Puoi personalizzarlo con l’opzione auth:
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 }});Forma dell’Oggetto User
Sezione intitolata “Forma dell’Oggetto User”// 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>;}Prossimi Passi
Sezione intitolata “Prossimi Passi”- Interrogare i dati — Operazioni CRUD e query builder
- Sottoscrizioni in tempo reale — Dati in diretta con i WebSocket
- Autenticazione nel Backend — Configurazione dell’autenticazione lato server
