API completa de autenticação de usuários usando Node.js, Express, Sequelize e JWT, com frontend básico para demonstração.
- ✅ 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
- ✅ 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
- Node.js (versão 14 ou superior)
- npm ou yarn
- Clone o repositório:
git clone <url-do-repositorio>
cd AuthJWT- Instale as dependências:
npm install- Execute o projeto:
# Modo desenvolvimento (com nodemon)
npm run dev
# Modo produção
npm start- Acesse a aplicação:
- Frontend: http://localhost:3000
- API: http://localhost:3000/api
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
| 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 | ✅ |
| Método | Endpoint | Descrição | Autenticação |
|---|---|---|---|
| GET | /users/me |
Dados do usuário logado | ✅ |
| Método | Endpoint | Descrição | Autenticação |
|---|---|---|---|
| GET | /api/health |
Status da API | ❌ |
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"
}
}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"
}
}curl -X GET http://localhost:3000/users/me \
-H "Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."Resposta:
{
"user": {
"id": 1,
"name": "João Silva",
"email": "joao@email.com"
}
}curl -X POST http://localhost:3000/auth/refresh \
-H "Content-Type: application/json" \
-d '{
"refreshToken": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."
}'# 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"
}'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=3000O projeto usa SQLite como banco de dados local. O arquivo database.sqlite será criado automaticamente na primeira execução.
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
- Acesse http://localhost:3000
- Cadastre-se ou faça login
- Teste as funcionalidades:
- Visualizar dados do usuário
- Atualizar informações
- Fazer logout
- Recuperar senha
- ✅ 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
NODE_ENV=production
JWT_SECRET=chave_super_secreta_producao
JWT_REFRESH_SECRET=chave_refresh_super_secreta_producao
PORT=3000# Instalar dependências
npm install --production
# Iniciar aplicação
npm start- Acesse http://localhost:3000
- Use a interface para testar todas as funcionalidades
- Importe os endpoints listados acima
- Configure as variáveis de ambiente para tokens
- Teste o fluxo completo de autenticação
Veja os exemplos na seção "Exemplos de Uso" acima.
- 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