Uma API REST que gerencia o login, cria um usuário, autentica a seção com token JWT, refine sua senha, e tem uma rota protegida para realizar as operações de crud de um projeto no mongoDB.
O projeto foi desenvolvido seguindo uma PlayList do canal da RocketSeat - Série API NodeJS, com o Diego Fernandes ministrando as aulas, foi uma das primeiras API que criei com o Node.js, então a parte de autenticação com JWT e de criptografia com o Bcrypt foram novidades, até o envio de e-mail com Nodemailer, e a utilização do serviço MailTrap que é uma caixa de e-mail fake, para fazer envio de e-mail em ambiente de desenvolvimento, que pra falar a verdade nem sabia que existia esse tipo de serviço, foi um projeto muito interessante e pude obter muito conhecimento com ele.
- JavaScript
- Node.js
- Banco de dados: MongoDB
- Cliente REST: Insomnia
Dependências
- Git (Para clonar, opcional)
- Node.js
- Npm (É instalado junto com o Node)
- MongoDB Local ou MongoDB Atlas
- caso escolha o MongoDB Atlas, será necessário trocar o link do banco na função connect dentro de src/database/index.js
Arquivos:
- É necessario criar dois arquivos dentro da pasta src/config.
- auth.json com o conteúdo:
{ "secret": "456bc20d374ee2f9db6cb55f87714559" }
- secret, é o hash da aplicação para gerar o token.
- vc pode gerar um hash md5 Aqui.
- mail.json com o conteúdo necessario para criar o transport do Nodemailer:
{ "host": "oHost", "port": aPorta, "user": "seuUser", "pass": "seuPass" }
- Primeiro passo, clone ou baixe o projeto em sua maquina
- Abra a pasta do projeto no terminal
- Instale as dependências com o comando
npm i
- Inicie o servidor com o comando
npm start
- A aplicação estara disponível na porta: 3000
Rotas para lidar com a autenticação:
// (POST) --- Rota de registro:
'http://localhost:3000/auth/register'
// Objeto usuario:
{
"name": "devsp",
"email": "devsp@teste.com",
"password": "123456"
}
// (POST) --- Rota de autenticação:
'http://localhost:3000/auth/authenticate'
// Objeto autenticação:
{
"email": "devsp@teste.com",
"password": "123456"
}
// (POST) --- Rota de esqueci a senha:
'http://localhost:3000/auth/forgot_password'
// Objeto esqueci a senha:
{
"email": "devsp@teste.com",
}
// (POST) --- Rota de redefinir senha:
'http://localhost:3000/auth/reset_password'
// Objeto redefinir senha:
{
"token": "560bd885f4441f485b49ed4c42d0910261a5f053",
"email": "devsp@teste.com",
"password": "12345678"
}
Rotas para lidar com os projetos:
// (GET) --- Rota para listar todos os projetos:
'http://localhost:3000/projects'
// (GET) --- Rota para um projeto:
'http://localhost:3000/projects/idProjetoAqui'
// (POST) --- Rota para cadastrar novo projeto:
'http://localhost:3000/projects'
// Objeto novo projeto:
{
"title": "tarefa 1",
"description": "descrevendo tarefa",
"tasks": [{
"title": "nome da tarefa",
"assignedTo": "idDoUsuario"
}]
}
// (PUT) --- Rota para editar projeto:
'http://localhost:3000/projects/idProjetoAqui'
// Objeto editar projeto:
{
"title": "tarefa 1 (Editado)",
"description": "descrevendo tarefa (Editado)",
"tasks": [{
"title": "nome da tarefa (Editado)",
"assignedTo": "idDoUsuario"
}]
}
// (DELETE) --- Rota para deletar um projeto:
'http://localhost:3000/projects/idProjetoAqui'