Pular para o conteúdo

Autenticação e Login

A Rebase fornece componentes e hooks React prontos para uso para autenticação:

  • useRebaseAuthController — Gerencia o estado de autenticação, os tokens e a persistência da sessão
  • LoginView — Formulário de login/cadastro pré-construído com suporte a OAuth
  • Simulação de papéis — Teste diferentes papéis sem sair da conta

O hook useRebaseAuthController é o núcleo da autenticação do frontend. Ele gerencia o usuário atual, os tokens e a sessão:

import { useRebaseAuthController } from "@rebasepro/app";
import { createRebaseClient } from "@rebasepro/client";
const client = createRebaseClient({ baseUrl: API_URL, websocketUrl: WS_URL });
const authController = useRebaseAuthController({
client,
googleClientId: GOOGLE_CLIENT_ID // Optional — enables Google OAuth
});
// Available properties:
authController.user // Current user object (or null)
authController.initialLoading // True while checking stored session
authController.signOut() // Log out
authController.getAuthToken() // Get current JWT for API calls

Passe o authController para o controlador de navegação da Rebase para proteger todo o painel de administração por trás da autenticação.

O componente LoginView fornece um formulário completo de login e cadastro:

import { LoginView } from "@rebasepro/app";
if (!authController.user) {
return (
<LoginView
authController={authController}
googleClientId={GOOGLE_CLIENT_ID}
/>
);
}

A visão de login cuida de:

  • Login e cadastro com e-mail/senha
  • Login com Google OAuth (quando configurado)
  • Fluxo de redefinição de senha
  • Validação de formulário e estados de erro

Os papéis são armazenados como uma coluna de array text[] diretamente na tabela rebase.users. Você define os papéis disponíveis como um enum na definição da sua coleção de usuários:

roles: {
name: "Roles",
type: "array",
columnType: "text[]",
of: {
name: "Role",
type: "string",
enum: {
admin: "Admin",
editor: "Editor",
viewer: "Viewer"
}
},
admin: {
readOnly: false
}
}

Para adicionar ou remover opções de papel, atualize o mapa enum na sua coleção de usuários e regenere o esquema.

No modo desenvolvedor, você pode simular diferentes papéis sem sair da conta. Isso é útil para testar as políticas RLS:

import { useBuildEffectiveRoleController } from "@rebasepro/app";
const effectiveRoleController = useBuildEffectiveRoleController();
// When active, the UI behaves as if the current user has this role
effectiveRoleController.setEffectiveRole("editor");