Qual é a sua dúvida?
Segurança em app node com JWT
Exemplo didático para segurança em api via JWT no NodeJS
Instalando as dependências
$ cd [project_folder] $ npm install --save jsonwebtoken dotenv-safe
No início do index.js do projeto ou do seu arquivo de entrada do sistema, insira o conteúdo abaixo:
$ nano index.js
const dotenv = require("dotenv"); dotenv.config(); ...
Crie o arquivo .env no diretório raiz do projeto com o conteúdo abaixo:
$ nano .env
#.env, don't commit to repo SECRET=123456
Crie o arquivo de configurações
$ nano config.js
module.exports = {
secret: {
id: "125453",
user: "admin",
password: "123456",
key: "lukejedimaster"
}
}
Crie a classe jwt-security.js com o conteúdo abaixo
$ nano jwt-security.js
const config = require("./config");
const jwt = require("jsonwebtoken");
class JwtSecurity {
login(req, res) {
console.log(req.body);
if (
req.body.user === config.secret.user &&
req.body.password === config.secret.password
) {
var id = config.secret.id;
var token = jwt.sign({ id }, process.env.SECRET, {
expiresIn: 300 // 5min
});
return res.json({ auth: true, token: token });
}
res.status(500).json({ message: "Login inválido!" });
}
logout(req, res) {
res.json({ auth: false, token: null });
}
verify(req, res, next) {
var token = req.headers["x-access-token"];
if (!token)
return res
.status(401)
.json({ auth: false, message: "No token provided." });
jwt.verify(token, process.env.SECRET, function(err, decoded) {
if (err)
return res
.status(500)
.json({ auth: false, message: "Failed to authenticate token." });
// se tudo estiver ok, salva no request para uso posterior
req.userId = decoded.id;
next();
});
}
}
module.exports = new JwtSecurity();
Para controlar a segurança dentro da classe de routes siga o exemplo abaixo, inserindo o uso da function jwt.verify
...
var router = require('express').Router();
const jwt = require("./jwt-security");
...
router
.post('/events', jwt.verify, eventsDb.save(req,res))
.post('/contacts', jwt.verify, contactsDb.save(req, res))
.post("/login", jwt.login)
.post("/logout", jwt.logout);