API para gerenciamento de blog que utiliza validação de tokens e controle de acesso através de RBAC (Role Based Access Control).
- Encriptação de senhas para armazenamento de usuários no banco de dados;
- Autenticação com a utilização de tokens JWT e proteção de rotas da aplicação;
- Utilização de access e refresh tokens para maior segurança, sendo armazenados os tokens inválidos através do Redis;
- Envio de e-mails ao criar usuários para verificação de e-mail utilizando um token.
- Cargos de administrador, editor e assinante, com diferentes níveis de permissão.
As seguintes tecnologias foram utilizadas:
$ git clone https://github.com/joaodslourenco/blog-do-codigo-api.gityarn OU
npm installNODE_ENV="development"
BASE_URL="localhost:3000"
CHAVE_JWT=(gere uma string aleatória e insira como valor da variável. Recomendo usar o módulo crypto do node, executando um console.log(crypto.randomBytes(256).toString('base64'))
OBS: caso você deseje fazer o envio de um email usando uma conta real, altere o valor da variável NODE_ENV para "production" e adicione as seguintes variáveis:
EMAIL_HOST=(endereço do seu provedor de email)
EMAIL_USUARIO=(seu email)
EMAIL_SENHA=(sua senha)yarn startOU
npm startPara começar a utilizar a API, com o servidor sendo executado, utilize o Postman ou Insomnia para fazer requisições às rotas, conforme exposto na tabela abaixo:
| Função | Tipo de requisição | Campos necessários (body) | Rota | Access Token |
|---|---|---|---|---|
| Consultar usuários | GET | N/A | "/usuario" | Possível consultar informações mais completas quando utilizar token |
| Cadastrar novo usuário | POST | { "nome": "abc", "email": "abc", "senha": "abc", "cargo": "admin/editor/assinante" } |
"/usuario" | N/A |
| Deletar pessoa | DELETE | N/A | "/usuario/:id" | Necessário |
| Realizar login | POST | { "email": "abc", "senha": "123" } |
"/usuario/login" | Necessário |
| Realizar logout | POST | { "refreshToken": "abc123" } |
"/usuario/logout" | Necessário |
| Atualizar token | POST | { "refreshToken": "abc123" } |
"/usuario/atualiza_token | N/A |
| Verificar e-mail | GET | N/A | "/usuario/verifica_email/:token" | N/A |
| Receber token via e-mail para recuperação de senha | POST | { "email": "abc" } |
"/usuario/esqueci-minha-senha" | N/A |
| Trocar senha | POST | { "token": "abc123", "senha": "abc123" } |
"/usuario/trocar-senha" | Necessário, no corpo da requisição. |
| Função | Tipo de requisição | Campos necessários (body) | Rota | Access Token |
|---|---|---|---|---|
| Consultar posts | GET | N/A | "/post" | Possível consultar informações mais completas quando utilizar token |
| Cadastrar novo post | POST | { "titulo": "abc", "conteudo": "abc" } |
"/post" | Necessário token de usuário com permissão (admin ou editor) |
| Consultar post específico | GET | N/A | "/post/:id" | Possível consultar informações mais completas quando utilizar token |
| Deletar post | DELETE | N/A | "/post/:id" | Necessário token de usuário com permissão (admin ou editor) |