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);