Autenticação
Visão Geral
Seção intitulada “Visão Geral”O módulo client.auth cuida da autenticação de usuários, do gerenciamento de tokens e da persistência de sessões. Depois que um usuário faz login, todas as requisições de dados subsequentes incluem automaticamente o JWT.
O SDK persiste as sessões no localStorage por padrão e atualiza os tokens automaticamente antes de expirarem.
E-mail / Senha
Seção intitulada “E-mail / Senha”const { user, accessToken, refreshToken } = await client.auth.signInWithEmail( "user@example.com", "password");console.log(user.uid, user.email);Cadastrar
Seção intitulada “Cadastrar”const { user } = await client.auth.signUp( "user@example.com", "password", "Jane Doe" // optional displayName);Provedores OAuth
Seção intitulada “Provedores OAuth”O SDK inclui métodos dedicados para provedores OAuth populares, além de um signInWithOAuth() genérico para qualquer provedor personalizado.
Suporta três estilos de invocação:
// 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://..." });Outros Provedores
Seção intitulada “Outros Provedores”Cada provedor segue o fluxo de código de autorização com (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 exigem parâmetros adicionais:
// 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
Seção intitulada “OAuth Genérico”Para qualquer provedor registrado no backend:
await client.auth.signInWithOAuth("custom-provider", { code: authCode, redirectUri: "https://myapp.com/callback"});await client.auth.signOut();Isso revoga o refresh token no servidor, limpa a sessão local e emite um evento SIGNED_OUT.
Gerenciamento de Sessões
Seção intitulada “Gerenciamento de Sessões”Obter a Sessão Atual
Seção intitulada “Obter a Sessão Atual”const session = client.auth.getSession();// { accessToken, refreshToken, expiresAt, user } | nullObter o Usuário Atual (Verificado pelo Servidor)
Seção intitulada “Obter o Usuário Atual (Verificado pelo Servidor)”const user = await client.auth.getUser();// Fetches the user from the backend (GET /auth/me)Atualizar o Perfil do Usuário
Seção intitulada “Atualizar o Perfil do Usuário”const updatedUser = await client.auth.updateUser({ displayName: "Jane Doe", photoURL: "https://example.com/avatar.jpg"});Atualizar o Token
Seção intitulada “Atualizar o Token”A atualização do token acontece automaticamente, mas você pode acioná-la manualmente:
const session = await client.auth.refreshSession();Listener do Estado de Autenticação
Seção intitulada “Listener do Estado de Autenticação”Reaja às mudanças de autenticação em toda a sua aplicação:
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();Gerenciamento de Senhas
Seção intitulada “Gerenciamento de Senhas”Senha Esquecida
Seção intitulada “Senha Esquecida”const { success, message } = await client.auth.resetPasswordForEmail( "user@example.com");Redefinir Senha (com Token)
Seção intitulada “Redefinir Senha (com Token)”const { success, message } = await client.auth.resetPassword( resetToken, "newSecurePassword");Alterar Senha (Autenticado)
Seção intitulada “Alterar Senha (Autenticado)”const { success, message } = await client.auth.changePassword( "oldPassword", "newPassword");Verificação de E-mail
Seção intitulada “Verificação de E-mail”// Send verification email to the current userawait client.auth.sendVerificationEmail();
// Verify with the token from the email linkawait client.auth.verifyEmail(token);Gerenciamento de Sessões (Múltiplos Dispositivos)
Seção intitulada “Gerenciamento de Sessões (Múltiplos Dispositivos)”// 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();Configuração de Autenticação
Seção intitulada “Configuração de Autenticação”Consulte a configuração de autenticação do backend:
const config = await client.auth.getAuthConfig();// {// needsSetup: boolean,// registrationEnabled: boolean,// emailServiceEnabled?: boolean,// passwordReset?: boolean,// emailVerification?: boolean,// enabledProviders: string[]// }Armazenamento de Sessão Personalizado
Seção intitulada “Armazenamento de Sessão Personalizado”Por padrão, as sessões são armazenadas no localStorage. Você pode personalizar isso com a opção 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 do Objeto User
Seção intitulada “Forma do 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 Passos
Seção intitulada “Próximos Passos”- Consultar Dados — Operações CRUD e construtor de consultas
- Assinaturas em Tempo Real — Dados ao vivo com WebSockets
- Backend de Autenticação — Configuração de autenticação do lado do servidor
