4.8 KiB
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-appwriteagora é gerado viauuidv7()com prefixouser_. - 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.
- O
- 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 estadouser. - O
userRolepassa a ser derivado diretamente deuser.nivel. - Isso mantém o papel do usuário sincronizado com o que foi persistido no login.
- Durante a verificação de autenticação, o usuário persistido em
3) Dependência uuid no frontend
- Onde:
package.json. - O que mudou:
- Inclusão de
uuidpara suportaruuidv7()na geração deauth-id-appwrite.
- Inclusão de
✅ Checklist detalhado (alterações recentes)
UUIDv7 no fluxo de criação de usuário
- Adicionar import do gerador
uuidv7no handler de criação de usuários. - Substituir a geração manual de
authIdporuuidv7()com prefixouser_. - Garantir que o documento salvo usa o
auth-id-appwritegerado por UUIDv7.
Evolução de autenticação no frontend
- Fazer parse do usuário persistido e armazenar em estado
user. - Derivar
userRolea partir deuser.nivelno mesmo fluxo de autenticação.
Dependências
- Adicionar
uuidnas 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.$idcorretamente - ✅ 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-registroquando 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
- Login bem-sucedido: Usuário é redirecionado para
/dashboard - Primeiro acesso: Usuário é redirecionado para
/completar-registro - Logs no console: Mostram "Auth User ID" sendo usado
- Sem erros 401: Não há mais erros de autorização
📚 Arquivos Modificados
src/app/login/page.tsx- Simplificação da lógica de loginPERMISSOES_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.