- Descrição
- Funcionalidades
- Requisitos
- Tecnologias Utilizadas
- Instalação e Configuração
- Arquitetura do Projeto
- Segurança
- Testes
- Documentação da API
- Ambiente de produção
- Contribuição
- Licença
- Pontos de Expansão Futuros
- Cronograma Estimado
- Autor
Este projeto implementa regras de autenticação e autorização utilizando NestJS. O sistema oferece funcionalidades de cadastro, autenticação via e-mail/senha, geração de tokens JWT, controle de acesso baseado em papéis (roles), criptografia de senhas e recuperação de acesso por hash.
- Gerenciamento de Usuário: Permite o cadastro, edição, atualização e exclusão de usuários (CRUD).
- Login: Autenticação via e-mail e senha.
- Geração de Token JWT: Token JWT gerado no login para autenticação em rotas protegidas.
- Recuperação de Senha: Envio de e-mail para redefinição de senha.
- Controle de Acesso (Roles): Permissões diferenciadas por papéis (Admin, User).
- Cadastro, login e gerenciamento de usuários.
- Autenticação e autorização via JWT.
- Validação de tokens JWT em rotas protegidas.
- Controle de acesso baseado em papéis (Roles).
- Recuperação e redefinição de senha.
- Segurança: Uso de bcrypt para senhas e JWT para autenticação.
- Escalabilidade: Capacidade de suportar múltiplos usuários simultâneos.
- Manutenibilidade: Código modular, seguindo boas práticas (SOLID, Clean Code).
- NestJS: Framework principal.
- TypeScript: Linguagem de programação.
- JWT: Para autenticação e autorização.
- Bcrypt: Para hashing de senhas.
- Prisma: ORM para interação com banco de dados.
- PostgreSQL: Banco de dados relacional.
- MailerSend: Para envio de e-mails.
- Swagger: Para documentação automática das APIs.
- Docker: Para containerização do ambiente.
- Render: Para ambiente de produção.
- Node.js
- Pnpm
- DockerCompose
- NestJS CLI
- Clone o repositório:
git clone https://github.com/F4GN3R/auth-api
- Instale as dependências:
$ cd auth-api && pnpm install
- Executar instância do banco de dados:
$ docker-compose up
- Configure as variáveis de ambiente no arquivo
.env
:
# DOCKER POSTGRESQL DATABASE
DATABASE_URL="postgresql://postgres:321654@localhost:6500/auth-api?schema=public"
# JWT
JWT_SECRET=""
# MAILERSEND
MAILERSEND_API_KEY=""
MAILERSEND_DOMAIN=""
MAILERSEND_TEMPLATE_ID=""
# WEBPAGE TO RESET PASSWORD
RESET_PASSWORD_URL=""
Para gerar o JWT_SECRET você pode utilizar o comando: openssl rand -base64 32
- Execute as migrações do banco de dados:
$ pnpm exec prisma migrate dev
- Inicie o servidor:
# development
$ pnpm run start
# watch mode
$ pnpm run start:dev
# production mode
$ pnpm run start:prod
O projeto é organizado em módulos para facilitar a manutenção e escalabilidade:
- AuthModule: Gerencia a autenticação e geração de tokens JWT.
- UserModule: Responsável pelo CRUD de usuários.
- MailerSendModule: Responsável pelo envio de usuários.
Permite um encapsulamento da lógica de acesso aos dados, impulsionando o uso da injeção de dependencia (DI) e proporcionando uma visão mais orientada a objetos.
- UserRepository: Define os métodos disponíveis do repositório de usuários.
- PrismaUserRepository: Implementa os métodos do repositório de usuários com Prisma ORM.
- GET /alive: Verificação de serviço disponível.
- POST /user: Cadastro de usuário.
- GET /user: Retorna os dados do usuário autenticado.
- PATCH /user: Atualiza os dados do usuário autenticado.
- DELETE /user: Remove o cadastro do usuário autenticado.
- GET /user/list-all: Retorna todos os usuários cadastrados.
- POST /auth/sign-in: Autenticação e geração de token JWT.
- PATCH /auth/account-recovery: Envia e-mail para recuperação de acesso.
- PATCH /auth/reset-password: Alteração de senha via hash.
- PATCH /auth/update-password: Atualização de senha.
- Hashing de Senhas: As senhas são armazenadas utilizando
bcrypt
. - Autenticação JWT: As rotas protegidas utilizam tokens JWT para autenticação.
- Guards e Middleware:
AuthGuard
: Protege rotas que exigem autenticação.RolesGuard
: Assegura que usuários com permissões adequadas possam acessar rotas específicas.
- Boas Práticas de Segurança:
- Proteção contra ataques de força bruta (rate-limiting).
- Validação de entrada de dados para evitar injeções de SQL.
- Proteção contra XSS e CSRF.
- Testes Unitários: Para verificar a lógica de autenticação e criptografia.
- Testes de Integração: Para garantir a interação correta entre os módulos (ex: login e geração de token).
- Testes de Segurança: Validar a resiliência do sistema contra ataques.
# unit tests
$ pnpm run test
# e2e tests
$ pnpm run test:e2e
# test coverage
$ pnpm run test:cov
A documentação da API está disponível através do Swagger. Para acessá-la, inicie o projeto e navegue para:
http://localhost:3333/documentation
Para produção, escolhemos a plataforma Render para publicar a API e o banco de dados.
https://auth-api-55xs.onrender.com/v1
- Faça um fork do projeto.
- Crie uma nova branch para a feature (
git checkout -b feature/nova-feature
). - Commit suas mudanças (
git commit -am 'Adiciona nova feature'
). - Faça o push para a branch (
git push origin feature/nova-feature
). - Abra um Pull Request.
Este projeto está licenciado sob a licença MIT - veja o arquivo LICENSE para mais detalhes.
- Refresh Token: Implementar um fluxo de refresh token para renovar o JWT.
- OAuth: Integração com provedores de login social (Google, Facebook).
- Autenticação Multi-Fator (MFA): Adicionar uma camada extra de segurança.
- Logs de Acesso e Auditoria: Registrar tentativas de login e outras ações críticas.
Fase | Tempo Estimado |
---|---|
Levantamento de Requisitos | 2 dias |
Configuração do Projeto | 1 dia |
Desenvolvimento Backend | 2 dias |
Implementação de Segurança | 2 dias |
Testes e Correções | 2 dias |
Documentação | 1 dia |
Deploy em produção | 1 dia |
Total estimado | 11 dias |
![]() |
Fagner Morais
Full Stack Developer and Senior System Analist |
Esse README.md
serve como uma documentação completa do projeto e pode ser utilizado diretamente no GitHub.