Aprenda a configurar, testar e rodar um ambiente completo de autenticação com Node.js, JWT e Front-end.
Abra o terminal e crie o diretório do projeto. Inicialize o gerenciador de pacotes do Node.js:
# Criar pasta e acessar
mkdir sistema-login
cd sistema-login
# Inicializar o projeto Node.js
npm init -y
Instale os pacotes necessários para segurança, servidor web e variáveis de ambiente:
npm install express bcryptjs jsonwebtoken cors dotenv
.env)Para criar o arquivo oculto de ambiente no Linux usando o terminal:
nano .env
Cole as seguintes configurações dentro do arquivo e salve (Ctrl + O, Enter, depois Ctrl + X):
PORT=3000
JWT_SECRET=minha_chave_secreta_super_segura_12345
FRONTEND_URL=*
server.js)Crie o arquivo principal do servidor:
touch server.js
Adicione o seguinte código para gerenciar as rotas de autenticação e proteção de dados:
require('dotenv').config();
const express = require('express');
const bcrypt = require('bcryptjs');
const jwt = require('jsonwebtoken');
const cors = require('cors');
const app = express();
app.use(cors());
app.use(express.json());
const CHAVE_SECRETA = process.env.JWT_SECRET;
const senhaHashExemplo = bcrypt.hashSync("123456", 10);
const usuarioNoBanco = {
id: 1,
email: "usuario@email.com",
senhaHash: senhaHashExemplo
};
// Rota de Autenticação
app.post('/api/login', async (req, res) => {
const { email, senha } = req.body;
if (email !== usuarioNoBanco.email) {
return res.status(401).json({ mensagem: "Credenciais inválidas!" });
}
const senhaValida = await bcrypt.compare(senha, usuarioNoBanco.senhaHash);
if (!senhaValida) {
return res.status(401).json({ mensagem: "Credenciais inválidas!" });
}
const token = jwt.sign({ id: usuarioNoBanco.id, email: usuarioNoBanco.email }, CHAVE_SECRETA, {
expiresIn: '1h'
});
return res.json({ token });
});
// Middleware de Segurança
function autenticarToken(req, res, next) {
const authHeader = req.headers['authorization'];
const token = authHeader && authHeader.split(' ')[1];
if (!token) return res.status(401).json({ mensagem: "Acesso negado!" });
jwt.verify(token, CHAVE_SECRETA, (err, user) => {
if (err) return res.status(403).json({ mensagem: "Sessão inválida ou expirada." });
req.user = user;
next();
});
}
// Rota Protegida
app.get('/api/dashboard', autenticarToken, (req, res) => {
res.json({
mensagem: "Acesso concedido aos dados restritos do servidor!",
usuario: req.user.email
});
});
const PORT = process.env.PORT || 3000;
app.listen(PORT, () => console.log(`🚀 Servidor ativo em http://localhost:${PORT}`));
Você pode rodar o servidor em modo de desenvolvimento de duas formas:
node server.jsnpx nodemon server.jsPara manter o servidor rodando em segundo plano mesmo após fechar o terminal, utilize o gerenciador de processos PM2:
sudo npm install -g pm2 && pm2 start server.js