saveinmed/saveinmed-frontend/MELHORIAS_AUTENTICACAO_AUTH_APPWRITE.md
2026-02-07 09:17:15 -03:00

4.8 KiB

Melhorias na Autenticação - Auth do Appwrite

Status (pronto x faltando)

Pronto

  • Conteúdo descrito neste documento.

Faltando

  • Confirmar no código o estado real das funcionalidades e atualizar esta seção conforme necessário.

📋 Resumo das Alterações

Este documento descreve as melhorias implementadas na autenticação para usar corretamente o ID do Auth do Appwrite.

🆕 Atualizações recentes (Gestão de usuários + AuthContext)

1) Geração de auth-id-appwrite com UUIDv7

  • Onde: API de gestão de usuários (/api/gestao-usuarios).
  • O que mudou:
    • O auth-id-appwrite agora é gerado via uuidv7() com prefixo user_.
    • Isso garante IDs ordenáveis e mais únicos no fluxo de criação de usuários.
    • O documento salvo em Appwrite passa a persistir exatamente o valor gerado.
  • Por quê:
    • UUIDv7 oferece ordenação temporal e melhor distribuição que UUIDv4.
    • Facilita auditoria e análise (IDs naturalmente ordenáveis).

2) População de userRole a partir do usuário persistido

  • Onde: AuthContext.
  • O que mudou:
    • Durante a verificação de autenticação, o usuário persistido em localStorage é parseado e armazenado no estado user.
    • O userRole passa a ser derivado diretamente de user.nivel.
    • Isso mantém o papel do usuário sincronizado com o que foi persistido no login.

3) Dependência uuid no frontend

  • Onde: package.json.
  • O que mudou:
    • Inclusão de uuid para suportar uuidv7() na geração de auth-id-appwrite.

Checklist detalhado (alterações recentes)

UUIDv7 no fluxo de criação de usuário

  • Adicionar import do gerador uuidv7 no handler de criação de usuários.
  • Substituir a geração manual de authId por uuidv7() com prefixo user_.
  • Garantir que o documento salvo usa o auth-id-appwrite gerado por UUIDv7.

Evolução de autenticação no frontend

  • Fazer parse do usuário persistido e armazenar em estado user.
  • Derivar userRole a partir de user.nivel no mesmo fluxo de autenticação.

Dependências

  • Adicionar uuid nas dependências do frontend para uso de UUIDv7.

🔧 Alterações Implementadas

1. Uso Correto do ID do Auth

  • Página de Login: Já estava usando account.get() para obter o usuário autenticado
  • Hook useAuth: Já estava usando authUser.$id corretamente
  • Consistência: Ambos os locais usam o mesmo ID do Auth do Appwrite

2. Simplificação da Lógica de Login

  • Removido: Criação automática de documento na collection usuarios
  • Mantido: Redirecionamento para /completar-registro quando usuário não existe na collection
  • Melhorado: Logs mais claros indicando uso do "ID do Auth"

3. Fluxo de Autenticação Otimizado

// Fluxo atual:
1. Login com email/senha  account.createEmailPasswordSession()
2. Obter usuário autenticado  account.get()
3. Usar currentUser.$id como ID do documento
4. Buscar na collection usuarios usando esse ID
5. Se encontrado  Dashboard
6. Se não encontrado  Completar Registro

🎯 Benefícios das Melhorias

Consistência de IDs

  • O ID do documento na collection usuarios é sempre igual ao ID do Auth
  • Elimina problemas de sincronização entre Auth e Database

Simplicidade

  • Removida lógica complexa de criação automática de documentos
  • Fluxo mais limpo e previsível

Segurança

  • Usa apenas IDs gerados pelo Appwrite Auth
  • Evita conflitos de IDs personalizados

📝 Configuração Necessária

Permissões da Collection usuarios

Certifique-se de que as permissões estão configuradas corretamente:

Role: users
Permissions: read, create, update

Estrutura do Documento

O documento na collection usuarios deve ter o mesmo $id do usuário no Auth:

{
  "$id": "auth_user_id_here",
  "nome-civil": "Nome do Usuário",
  "email": "email@exemplo.com",
  "nivel": "cliente",
  "ativo": true,
  // outros campos...
}

🔍 Como Verificar se Está Funcionando

  1. Login bem-sucedido: Usuário é redirecionado para /dashboard
  2. Primeiro acesso: Usuário é redirecionado para /completar-registro
  3. Logs no console: Mostram "Auth User ID" sendo usado
  4. Sem erros 401: Não há mais erros de autorização

📚 Arquivos Modificados

  • src/app/login/page.tsx - Simplificação da lógica de login
  • PERMISSOES_COLLECTION_USUARIOS.md - Documentação de permissões

Status

  • Verificação do uso do ID do Auth
  • Simplificação da lógica de login
  • Remoção de criação automática de documentos
  • Teste da aplicação
  • Documentação das melhorias

Resultado: A autenticação agora usa corretamente o ID do Auth do Appwrite de forma consistente e simplificada.