API RESTful desenvolvida com Node.js, Express e MongoDB com foco em autenticação, autorização e controle de acesso baseado em roles utilizando JWT.
O projeto implementa boas práticas de organização em camadas, tratamento centralizado de erros, validação de dados e proteção de rotas.
- Tecnologias
- Arquitetura
- Funcionalidades
- Fluxo de autenticação
- Estrutura do projeto
- Rotas
- Middlewares
- Variáveis de ambiente
- Instalação
- Testes
- Melhorias futuras
- Autor
| Tecnologia | Função |
|---|---|
| Node.js | Ambiente de execução |
| Express | Framework HTTP |
| MongoDB | Banco de dados NoSQL |
| Mongoose | ODM do MongoDB |
| JWT | Autenticação |
| bcrypt | Hash de senhas |
| Joi | Validação de dados |
| dotenv | Variáveis de ambiente |
O projeto segue separação em camadas para melhorar:
- organização
- escalabilidade
- manutenção
- reutilização de código
Responsáveis por receber as requisições e retornar respostas.
Contêm as regras de negócio da aplicação.
Responsáveis por autenticação, autorização, validação e tratamento de erros.
Representação das entidades do banco de dados utilizando Mongoose.
Validação de dados de entrada.
src/
├── controllers/
│ ├── auth.controller.js
│ └── usuario.controller.js
│
├── middlewares/
│ ├── asyncHandler.middleware.js
| |_ error.middleware.js
│ ├── middleware.js
│ └── validate.middleware.js
│
├── model/
│ └── usuario.model.js
│
├── routes/
│ └── usuario.routes.js
│
├── schemas/
│ └── usuario.schema.js
│
├── services/
│ ├── auth.service.js
│ └── usuario.service.js
│
├── utils/
│ ├── AppError.js
│ └── response.js
│
|_ database.js
└── server.jsO usuário é criado com senha criptografada utilizando bcrypt.
Após autenticação:
- email é validado
- senha é comparada com bcrypt
- JWT é gerado
Exemplo de payload:
{
"id": "user_id",
"role": "admin"
}O token deve ser enviado nas rotas protegidas:
Authorization: Bearer SEU_TOKENA aplicação possui autorização baseada em roles.
user
admin| Funcionalidade | User | Admin |
|---|---|---|
| Visualizar perfil | ✅ | ✅ |
| Atualizar perfil | ✅ | ✅ |
| Listar usuários | ❌ | ✅ |
| Deletar usuários | ❌ | ✅ |
Responsável por:
- verificar token JWT
- validar autenticação
- adicionar usuário autenticado no req.user
Responsável por:
- permitir acesso apenas para usuários admin
Responsável por:
- permitir acesso ao próprio usuário
- permitir acesso total ao admin
POST /usuarios{
"nome": "Alonso",
"email": "alonso@test.com",
"senha": "123456",
"role": "admin"
}POST /usuarios/login{
"email": "alonso@test.com",
"senha": "123456"
}GET /usuarios/perfilPUT /usuarios/perfilGET /usuarios/usuariosAdminDELETE /usuarios/usuarios/:idAdminCrie um arquivo .env na raiz do projeto:
PORT=3000
MONGO_URI=sua_string_do_mongodb
JWT_SECRET=seuSegredoSuperSegurogit clone https://github.com/AlonsoFavero/backend-auth-api.gitnpm installnode src/server.jsou
npm run devOs testes da aplicação foram realizados utilizando Postman.
- Cadastro de usuários
- Login
- Geração de token JWT
- Rotas protegidas
- Controle de acesso por role
- Atualização de perfil
- Exclusão de usuários
- Bloqueio de acesso sem autenticação
- Bloqueio de acesso sem permissão
- Refresh Token
- Upload de imagem de perfil
- Recuperação de senha
- Logs estruturados
- Testes automatizados
- Deploy em nuvem
- Rate limiting
- Documentação Swagger
Durante o desenvolvimento foram aplicados conceitos importantes de backend:
- APIs REST
- Arquitetura em camadas
- Middlewares
- JWT
- Hash de senhas
- Controle de acesso
- Tratamento de erros
- Validação de dados
- MongoDB com Mongoose
- Segurança em APIs
Desenvolvido por: Alonso Favero Filho.