Autenticación
Resumen
Sección titulada «Resumen»El módulo client.auth gestiona la autenticación de usuarios, la gestión de tokens y la persistencia de sesiones. Una vez que un usuario inicia sesión, todas las peticiones de datos posteriores incluyen automáticamente el JWT.
El SDK persiste las sesiones en localStorage de forma predeterminada y refresca automáticamente los tokens antes de que caduquen.
Email / Contraseña
Sección titulada «Email / Contraseña»Iniciar Sesión
Sección titulada «Iniciar Sesión»const { user, accessToken, refreshToken } = await client.auth.signInWithEmail( "user@example.com", "password");console.log(user.uid, user.email);Registrarse
Sección titulada «Registrarse»const { user } = await client.auth.signUp( "user@example.com", "password", "Jane Doe" // optional displayName);Proveedores OAuth
Sección titulada «Proveedores OAuth»El SDK incluye métodos dedicados para los proveedores OAuth más populares, además de un signInWithOAuth() genérico para cualquier proveedor personalizado.
Admite tres estilos de invocación:
// 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://..." });Otros Proveedores
Sección titulada «Otros Proveedores»Cada proveedor sigue el flujo de código de autorización 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 y Twitter requieren parámetros adicionales:
// 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 Genérico
Sección titulada «OAuth Genérico»Para cualquier proveedor registrado en el backend:
await client.auth.signInWithOAuth("custom-provider", { code: authCode, redirectUri: "https://myapp.com/callback"});Cerrar Sesión
Sección titulada «Cerrar Sesión»await client.auth.signOut();Esto revoca el refresh token en el servidor, borra la sesión local y emite un evento SIGNED_OUT.
Gestión de Sesiones
Sección titulada «Gestión de Sesiones»Obtener la Sesión Actual
Sección titulada «Obtener la Sesión Actual»const session = client.auth.getSession();// { accessToken, refreshToken, expiresAt, user } | nullObtener el Usuario Actual (Verificado por el Servidor)
Sección titulada «Obtener el Usuario Actual (Verificado por el Servidor)»const user = await client.auth.getUser();// Fetches the user from the backend (GET /auth/me)Actualizar el Perfil del Usuario
Sección titulada «Actualizar el Perfil del Usuario»const updatedUser = await client.auth.updateUser({ displayName: "Jane Doe", photoURL: "https://example.com/avatar.jpg"});Refrescar el Token
Sección titulada «Refrescar el Token»El refresco del token ocurre automáticamente, pero puede activarlo manualmente:
const session = await client.auth.refreshSession();Listener del Estado de Autenticación
Sección titulada «Listener del Estado de Autenticación»Reaccione a los cambios de autenticación en toda su aplicación:
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();Gestión de Contraseñas
Sección titulada «Gestión de Contraseñas»Contraseña Olvidada
Sección titulada «Contraseña Olvidada»const { success, message } = await client.auth.resetPasswordForEmail( "user@example.com");Restablecer Contraseña (con Token)
Sección titulada «Restablecer Contraseña (con Token)»const { success, message } = await client.auth.resetPassword( resetToken, "newSecurePassword");Cambiar Contraseña (Autenticado)
Sección titulada «Cambiar Contraseña (Autenticado)»const { success, message } = await client.auth.changePassword( "oldPassword", "newPassword");Verificación de Email
Sección titulada «Verificación de Email»// Send verification email to the current userawait client.auth.sendVerificationEmail();
// Verify with the token from the email linkawait client.auth.verifyEmail(token);Gestión de Sesiones (Multidispositivo)
Sección titulada «Gestión de Sesiones (Multidispositivo)»// 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();Configuración de Autenticación
Sección titulada «Configuración de Autenticación»Consulte la configuración de autenticación del backend:
const config = await client.auth.getAuthConfig();// {// needsSetup: boolean,// registrationEnabled: boolean,// emailServiceEnabled?: boolean,// passwordReset?: boolean,// emailVerification?: boolean,// enabledProviders: string[]// }Almacenamiento de Sesión Personalizado
Sección titulada «Almacenamiento de Sesión Personalizado»De forma predeterminada, las sesiones se almacenan en localStorage. Puede personalizarlo con la opción 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 del Objeto User
Sección titulada «Forma del Objeto 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>;}Próximos Pasos
Sección titulada «Próximos Pasos»- Consultar Datos — Operaciones CRUD y constructor de consultas
- Suscripciones en Tiempo Real — Datos en vivo con WebSockets
- Backend de Autenticación — Configuración de autenticación del lado del servidor
