Skip to content

dennysmatos/mts20t1-desafio3-login-api

Repository files navigation

API REST de Login - MTS20T1 Desafio 3

Uma API REST simples de login desenvolvida com Node.js e Express, implementando todas as funcionalidades solicitadas.

Funcionalidades

Login com sucesso: Autenticação com username e password
Login inválido: Retorna erro 401 para credenciais incorretas
Bloqueio após 3 tentativas: Bloqueia usuário por 15 minutos após 3 tentativas consecutivas falhas
Lembrar senha: Rota POST /remember para simular recuperação de senha

Instalação

  1. Clone o repositório
  2. Instale as dependências:
npm install

Executando a API

Modo desenvolvimento (com nodemon):

npm run dev

Modo produção:

npm start

A API estará disponível em http://localhost:3000

Endpoints

1. Login

POST /login

Body:

{
  "username": "admin",
  "password": "admin123"
}

Resposta de sucesso (200):

{
  "success": true,
  "message": "Login realizado com sucesso!",
  "user": {
    "username": "admin"
  }
}

Resposta de erro (401):

{
  "success": false,
  "message": "Credenciais inválidas. Tentativas restantes: 2"
}

2. Lembrar Senha

POST /remember

Body:

{
  "username": "admin"
}

Resposta (200):

{
  "success": true,
  "message": "E-mail de recuperação enviado para o usuário admin. Verifique sua caixa de entrada."
}

3. Verificar Status (Debug)

GET /status/:username

Resposta:

{
  "username": "admin",
  "isBlocked": false,
  "consecutiveFailures": 0,
  "blockedUntil": null
}

4. Listar Usuários (Teste)

GET /users

Resposta:

{
  "success": true,
  "users": [
    {
      "username": "admin",
      "password": "***"
    }
  ]
}

Usuários para Teste

Username Password
admin admin123
user1 password123
teste 123456

Funcionalidades de Segurança

Bloqueio de Usuário

  • Após 3 tentativas consecutivas de login falhas, o usuário é bloqueado por 15 minutos
  • Durante o bloqueio, todas as tentativas de login retornam erro 401
  • O bloqueio é automático e baseado em tempo

Controle de Tentativas

  • O sistema mantém registro de tentativas consecutivas falhas
  • Tentativas bem-sucedidas resetam o contador de falhas
  • Informações sobre tentativas restantes são fornecidas nas respostas de erro

Estrutura do Projeto

├── server.js          # Servidor principal da API
├── package.json       # Dependências e scripts
└── README.md         # Documentação

Tecnologias Utilizadas

  • Node.js: Runtime JavaScript
  • Express: Framework web
  • CORS: Middleware para Cross-Origin Resource Sharing

Testando a API

Exemplo com curl:

Login bem-sucedido:

curl -X POST http://localhost:3000/login \
  -H "Content-Type: application/json" \
  -d '{"username": "admin", "password": "admin123"}'

Login com credenciais inválidas:

curl -X POST http://localhost:3000/login \
  -H "Content-Type: application/json" \
  -d '{"username": "admin", "password": "senhaerrada"}'

Solicitar recuperação de senha:

curl -X POST http://localhost:3000/remember \
  -H "Content-Type: application/json" \
  -d '{"username": "admin"}'

Dados em Memória

Todos os dados são mantidos em memória durante a execução da aplicação:

  • Lista de usuários válidos
  • Registro de tentativas de login
  • Usuários bloqueados com timestamps

Nota: Os dados são perdidos quando o servidor é reiniciado.

About

Uma API REST simples de login desenvolvida com Node.js e Express, implementando todas as funcionalidades

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published