140 lines
4.8 KiB
Markdown
140 lines
4.8 KiB
Markdown
# 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
|
|
- [x] Adicionar import do gerador `uuidv7` no handler de criação de usuários.
|
|
- [x] Substituir a geração manual de `authId` por `uuidv7()` com prefixo `user_`.
|
|
- [x] Garantir que o documento salvo usa o `auth-id-appwrite` gerado por UUIDv7.
|
|
|
|
### Evolução de autenticação no frontend
|
|
- [x] Fazer parse do usuário persistido e armazenar em estado `user`.
|
|
- [x] Derivar `userRole` a partir de `user.nivel` no mesmo fluxo de autenticação.
|
|
|
|
### Dependências
|
|
- [x] 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**
|
|
|
|
```typescript
|
|
// 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:
|
|
|
|
```json
|
|
{
|
|
"$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
|
|
|
|
- [x] Verificação do uso do ID do Auth
|
|
- [x] Simplificação da lógica de login
|
|
- [x] Remoção de criação automática de documentos
|
|
- [x] Teste da aplicação
|
|
- [x] Documentação das melhorias
|
|
|
|
**Resultado**: A autenticação agora usa corretamente o ID do Auth do Appwrite de forma consistente e simplificada.
|