Vendaweb-portal/README_AUTH.md

175 lines
5.1 KiB
Markdown
Raw Permalink Normal View History

2026-01-08 12:09:16 +00:00
# Sistema de Autenticação - VendaWeb React
## 📋 Visão Geral
Este documento descreve o sistema de autenticação implementado no projeto React, baseado na implementação do portal Angular.
## 🏗️ Estrutura
```
vendaweb_react/
├── .env # Variáveis de ambiente (não versionado)
├── .env.example # Template de variáveis de ambiente
├── src/
│ ├── config/
│ │ └── env.ts # Configuração centralizada de variáveis
│ ├── contexts/
│ │ └── AuthContext.tsx # Contexto React de autenticação
│ ├── services/
│ │ └── auth.service.ts # Serviço de autenticação
│ └── types/
│ └── auth.ts # Tipos TypeScript para autenticação
```
## 🔧 Configuração
### 1. Variáveis de Ambiente
Crie um arquivo `.env` na raiz do projeto com as seguintes variáveis:
```env
# API Configuration
VITE_API_URL=http://vendaweb.jurunense.com.br/api/v1/
VITE_API_URL_PIX=http://10.1.1.205:8078/api/v1/
# Default Domain
VITE_DEFAULT_DOMAIN=@jurunense.com.br
# Firebase Configuration (opcional)
VITE_FIREBASE_API_KEY=your_key
VITE_FIREBASE_AUTH_DOMAIN=your_domain
# ... outras configurações do Firebase
```
**Importante:** No Vite, todas as variáveis de ambiente devem começar com `VITE_` para serem expostas ao código do cliente.
### 2. Instalação
O projeto já inclui todas as dependências necessárias. Não são necessárias dependências adicionais para autenticação.
## 🔐 Funcionalidades
### AuthService
O serviço de autenticação (`auth.service.ts`) fornece:
- **login(email, password)**: Realiza login do usuário
- **authenticate(email, password)**: Autentica para autorizações especiais
- **saveToken(token)**: Salva token no localStorage
- **saveUser(user)**: Salva usuário no localStorage
- **getToken()**: Obtém token do localStorage
- **getUser()**: Obtém usuário do localStorage
- **clearAuth()**: Remove dados de autenticação
- **isAuthenticated()**: Verifica se usuário está autenticado
- **isManager()**: Verifica se usuário é gerente (baseado no JWT)
- **getAuthHeaders()**: Retorna headers para requisições autenticadas
### AuthContext
O contexto React (`AuthContext.tsx`) fornece:
- Estado global de autenticação
- Funções de login/logout
- Acesso a dados do usuário
- Hook `useAuth()` para usar em componentes
### Uso do Hook useAuth
```tsx
import { useAuth } from './src/contexts/AuthContext';
function MyComponent() {
const {
user,
isAuthenticated,
isLoading,
login,
logout
} = useAuth();
if (isLoading) return <div>Carregando...</div>;
if (!isAuthenticated) return <div>Faça login</div>;
return <div>Olá, {user?.username}!</div>;
}
```
## 🔄 Fluxo de Autenticação
1. **Login**: Usuário preenche email e senha
2. **Processamento**: Email e senha são convertidos para UPPERCASE e domínio é adicionado automaticamente
3. **Requisição**: POST para `/auth/login` com credenciais
4. **Resposta**: Recebe token JWT e dados do usuário
5. **Armazenamento**: Token e usuário são salvos no localStorage
6. **Estado**: Context atualiza estado global
7. **Redirecionamento**: Usuário é redirecionado para o menu principal
## 📝 Características Especiais
### Processamento de Email
- Se o usuário digitar `usuario@jurunense.com.br`, o domínio é removido e readicionado
- Email é sempre convertido para UPPERCASE antes do envio
- Domínio padrão: `@jurunense.com.br`
### Processamento de Senha
- Senha é sempre convertida para UPPERCASE antes do envio
- Validação mínima: 3 caracteres
### Token JWT
- Token é armazenado no localStorage como `token`
- Token é usado no header `Authorization: Basic {token}`
- Token pode ser decodificado para verificar permissões (ex: isManager)
### Dados do Usuário
Armazenados no localStorage como `user` (JSON):
```json
{
"id": 1,
"username": "USUARIO",
"name": "Nome do Usuário",
"store": "Loja Jurunense",
"seller": "Vendedor",
"supervisorId": 123,
"deliveryTime": "24h",
"token": "jwt_token_here"
}
```
## 🛡️ Segurança
- Tokens são armazenados apenas no localStorage (considerar migração para httpOnly cookies em produção)
- Credenciais são sempre enviadas em UPPERCASE (conforme padrão do sistema)
- Validação de formulário no frontend
- Tratamento de erros de autenticação
## 🔗 Integração com API
O sistema está configurado para usar a mesma API do portal Angular:
- **Base URL**: `http://vendaweb.jurunense.com.br/api/v1/`
- **Login Endpoint**: `POST /auth/login`
- **Authenticate Endpoint**: `POST /auth/authenticate`
- **Authorization Header**: `Basic {token}`
## 📚 Próximos Passos
1. Implementar refresh token (se necessário)
2. Implementar interceptors para requisições HTTP
3. Adicionar tratamento de expiração de token
4. Implementar roteamento protegido
5. Adicionar testes unitários
## ⚠️ Notas Importantes
- O arquivo `.env` não deve ser versionado (já está no .gitignore)
- Use `.env.example` como template
- Em produção, configure as variáveis de ambiente no servidor
- O sistema mantém compatibilidade com a API existente do portal Angular