Skip to content

CancianiWill/AuthJWT

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

🔐 AuthJWT - Sistema de Autenticação com JWT

API completa de autenticação de usuários usando Node.js, Express, Sequelize e JWT, com frontend básico para demonstração.

🚀 Funcionalidades

Backend (API)

  • Cadastro de usuários com validação e hash de senha
  • Login com geração de access token e refresh token
  • Refresh token para renovação automática de tokens
  • Recuperação de senha com token temporário
  • Logout com invalidação de tokens
  • Rotas protegidas com middleware de autenticação
  • Banco de dados SQLite com Sequelize ORM

Frontend

  • Interface moderna e responsiva
  • Formulários de login, cadastro e recuperação de senha
  • Gerenciamento automático de tokens
  • Renovação automática de tokens expirados
  • Persistência de sessão no localStorage

📋 Requisitos

  • Node.js (versão 14 ou superior)
  • npm ou yarn

🛠️ Instalação

  1. Clone o repositório:
git clone <url-do-repositorio>
cd AuthJWT
  1. Instale as dependências:
npm install
  1. Execute o projeto:
# Modo desenvolvimento (com nodemon)
npm run dev

# Modo produção
npm start
  1. Acesse a aplicação:

📁 Estrutura do Projeto

AuthJWT/
├── src/
│   ├── config/
│   │   └── database.js          # Configuração do Sequelize
│   ├── controllers/
│   │   └── authController.js    # Lógica de autenticação
│   ├── middlewares/
│   │   └── authMiddleware.js    # Middleware JWT
│   ├── models/
│   │   └── user.js             # Modelo User
│   ├── routes/
│   │   ├── authRoutes.js       # Rotas de autenticação
│   │   └── userRoutes.js       # Rotas de usuário
│   └── app.js                  # Aplicação principal
├── public/
│   ├── index.html              # Frontend HTML
│   ├── styles.css              # Estilos CSS
│   └── script.js               # JavaScript do frontend
├── database.sqlite             # Banco de dados SQLite
├── package.json
└── README.md

🔗 Endpoints da API

Autenticação

Método Endpoint Descrição Autenticação
POST /auth/register Cadastro de usuário
POST /auth/login Login
POST /auth/refresh Renovar access token
POST /auth/forgot Solicitar recuperação de senha
POST /auth/reset/:token Redefinir senha
POST /auth/logout Logout
GET /auth/me Dados do usuário logado

Usuários

Método Endpoint Descrição Autenticação
GET /users/me Dados do usuário logado

Sistema

Método Endpoint Descrição Autenticação
GET /api/health Status da API

📝 Exemplos de Uso

1. Cadastro de Usuário

curl -X POST http://localhost:3000/auth/register \
  -H "Content-Type: application/json" \
  -d '{
    "name": "João Silva",
    "email": "joao@email.com",
    "password": "123456"
  }'

Resposta:

{
  "message": "Usuário criado com sucesso",
  "user": {
    "id": 1,
    "name": "João Silva",
    "email": "joao@email.com",
    "createdAt": "2024-01-01T10:00:00.000Z"
  }
}

2. Login

curl -X POST http://localhost:3000/auth/login \
  -H "Content-Type: application/json" \
  -d '{
    "email": "joao@email.com",
    "password": "123456"
  }'

Resposta:

{
  "message": "Login realizado com sucesso",
  "accessToken": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
  "refreshToken": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
  "user": {
    "id": 1,
    "name": "João Silva",
    "email": "joao@email.com"
  }
}

3. Acessar Rota Protegida

curl -X GET http://localhost:3000/users/me \
  -H "Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."

Resposta:

{
  "user": {
    "id": 1,
    "name": "João Silva",
    "email": "joao@email.com"
  }
}

4. Renovar Token

curl -X POST http://localhost:3000/auth/refresh \
  -H "Content-Type: application/json" \
  -d '{
    "refreshToken": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."
  }'

5. Recuperação de Senha

# Solicitar recuperação
curl -X POST http://localhost:3000/auth/forgot \
  -H "Content-Type: application/json" \
  -d '{
    "email": "joao@email.com"
  }'

# Redefinir senha (usar token do console do servidor)
curl -X POST http://localhost:3000/auth/reset/abc123token \
  -H "Content-Type: application/json" \
  -d '{
    "password": "novaSenha123"
  }'

🔧 Configuração

Variáveis de Ambiente

Crie um arquivo .env na raiz do projeto:

JWT_SECRET=sua_chave_secreta_super_segura_aqui
JWT_REFRESH_SECRET=sua_chave_refresh_secreta_super_segura_aqui
PORT=3000

Banco de Dados

O projeto usa SQLite como banco de dados local. O arquivo database.sqlite será criado automaticamente na primeira execução.

🎨 Frontend

O frontend incluído oferece:

  • Interface moderna com design responsivo
  • Formulários intuitivos para todas as operações
  • Gerenciamento automático de tokens com renovação
  • Feedback visual para todas as ações
  • Persistência de sessão no navegador

Como Usar o Frontend

  1. Acesse http://localhost:3000
  2. Cadastre-se ou faça login
  3. Teste as funcionalidades:
    • Visualizar dados do usuário
    • Atualizar informações
    • Fazer logout
    • Recuperar senha

🔒 Segurança

  • ✅ Senhas hasheadas com bcrypt (salt rounds: 10)
  • ✅ Tokens JWT com expiração configurável
  • ✅ Refresh tokens para renovação segura
  • ✅ Validação de entrada em todos os endpoints
  • ✅ Middleware de autenticação para rotas protegidas
  • ✅ CORS configurado para desenvolvimento

🚀 Deploy

Variáveis de Ambiente para Produção

NODE_ENV=production
JWT_SECRET=chave_super_secreta_producao
JWT_REFRESH_SECRET=chave_refresh_super_secreta_producao
PORT=3000

Comandos de Deploy

# Instalar dependências
npm install --production

# Iniciar aplicação
npm start

🧪 Testando a API

Usando o Frontend

  1. Acesse http://localhost:3000
  2. Use a interface para testar todas as funcionalidades

Usando Postman/Insomnia

  1. Importe os endpoints listados acima
  2. Configure as variáveis de ambiente para tokens
  3. Teste o fluxo completo de autenticação

Usando cURL

Veja os exemplos na seção "Exemplos de Uso" acima.

📚 Tecnologias Utilizadas

  • Node.js - Runtime JavaScript
  • Express.js - Framework web
  • Sequelize - ORM para banco de dados
  • SQLite - Banco de dados local
  • JWT - Autenticação baseada em tokens
  • bcrypt - Hash de senhas
  • CORS - Cross-Origin Resource Sharing

API de Usuários com Autenticação JWT em Node.js (JavaScript) com Express e Sequelize

About

API de Usuários com Autenticação JWT em Node.js (JavaScript) com Express e Sequelize

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors