From 8f504daad18be824b349ac6f3014d5e0a27d231c Mon Sep 17 00:00:00 2001 From: sergio17 Date: Thu, 15 Sep 2022 21:10:30 -0500 Subject: [PATCH 1/6] generate JWT --- helpers/generar-jwt.js | 27 ++++++ package-lock.json | 198 +++++++++++++++++++++++++++++++++++++++++ package.json | 1 + 3 files changed, 226 insertions(+) create mode 100644 helpers/generar-jwt.js diff --git a/helpers/generar-jwt.js b/helpers/generar-jwt.js new file mode 100644 index 0000000..808c354 --- /dev/null +++ b/helpers/generar-jwt.js @@ -0,0 +1,27 @@ +const jwt = require('jsonwebtoken'); + +const generarJWT = (email) => { + return new Promise((resolve, reject) => { + const payload = {email}; + + jwt.sign( + payload, + process.env.SECRETORPRIVATEKEY, + { + expiresIn: '24h', + }, + (err, token) => { + if (err) { + console.log(err) + reject('No fue posible generar el JWT'); + } else { + resolve(token); + } + } + ); + }); +}; + +module.exports = { + generarJWT +} diff --git a/package-lock.json b/package-lock.json index 698da9e..031df4d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -15,6 +15,7 @@ "ejs": "~2.6.1", "express": "~4.16.1", "http-errors": "~1.6.3", + "jsonwebtoken": "^8.5.1", "morgan": "~1.9.1", "mysql2": "^2.2.3", "sequelize": "^6.3.5" @@ -134,6 +135,11 @@ "concat-map": "0.0.1" } }, + "node_modules/buffer-equal-constant-time": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", + "integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==" + }, "node_modules/bytes": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", @@ -327,6 +333,14 @@ "resolved": "https://registry.npmjs.org/dottie/-/dottie-2.0.2.tgz", "integrity": "sha512-fmrwR04lsniq/uSr8yikThDTrM7epXHBAAjH9TbeH3rEA8tdCO7mRzB9hdmdGyJCxF8KERo9CITcm3kGuoyMhg==" }, + "node_modules/ecdsa-sig-formatter": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", + "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", + "dependencies": { + "safe-buffer": "^5.0.1" + } + }, "node_modules/editorconfig": { "version": "0.15.3", "resolved": "https://registry.npmjs.org/editorconfig/-/editorconfig-0.15.3.tgz", @@ -738,6 +752,59 @@ "graceful-fs": "^4.1.6" } }, + "node_modules/jsonwebtoken": { + "version": "8.5.1", + "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-8.5.1.tgz", + "integrity": "sha512-XjwVfRS6jTMsqYs0EsuJ4LGxXV14zQybNd4L2r0UvbVnSF9Af8x7p5MzbJ90Ioz/9TI41/hTCvznF/loiSzn8w==", + "dependencies": { + "jws": "^3.2.2", + "lodash.includes": "^4.3.0", + "lodash.isboolean": "^3.0.3", + "lodash.isinteger": "^4.0.4", + "lodash.isnumber": "^3.0.3", + "lodash.isplainobject": "^4.0.6", + "lodash.isstring": "^4.0.1", + "lodash.once": "^4.0.0", + "ms": "^2.1.1", + "semver": "^5.6.0" + }, + "engines": { + "node": ">=4", + "npm": ">=1.4.28" + } + }, + "node_modules/jsonwebtoken/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + }, + "node_modules/jsonwebtoken/node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/jwa": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz", + "integrity": "sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==", + "dependencies": { + "buffer-equal-constant-time": "1.0.1", + "ecdsa-sig-formatter": "1.0.11", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/jws": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz", + "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==", + "dependencies": { + "jwa": "^1.4.1", + "safe-buffer": "^5.0.1" + } + }, "node_modules/locate-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", @@ -756,6 +823,41 @@ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz", "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==" }, + "node_modules/lodash.includes": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz", + "integrity": "sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w==" + }, + "node_modules/lodash.isboolean": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz", + "integrity": "sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg==" + }, + "node_modules/lodash.isinteger": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz", + "integrity": "sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA==" + }, + "node_modules/lodash.isnumber": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz", + "integrity": "sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw==" + }, + "node_modules/lodash.isplainobject": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", + "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==" + }, + "node_modules/lodash.isstring": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", + "integrity": "sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==" + }, + "node_modules/lodash.once": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", + "integrity": "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==" + }, "node_modules/long": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz", @@ -1663,6 +1765,11 @@ "concat-map": "0.0.1" } }, + "buffer-equal-constant-time": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", + "integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==" + }, "bytes": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", @@ -1823,6 +1930,14 @@ "resolved": "https://registry.npmjs.org/dottie/-/dottie-2.0.2.tgz", "integrity": "sha512-fmrwR04lsniq/uSr8yikThDTrM7epXHBAAjH9TbeH3rEA8tdCO7mRzB9hdmdGyJCxF8KERo9CITcm3kGuoyMhg==" }, + "ecdsa-sig-formatter": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", + "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", + "requires": { + "safe-buffer": "^5.0.1" + } + }, "editorconfig": { "version": "0.15.3", "resolved": "https://registry.npmjs.org/editorconfig/-/editorconfig-0.15.3.tgz", @@ -2178,6 +2293,54 @@ "graceful-fs": "^4.1.6" } }, + "jsonwebtoken": { + "version": "8.5.1", + "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-8.5.1.tgz", + "integrity": "sha512-XjwVfRS6jTMsqYs0EsuJ4LGxXV14zQybNd4L2r0UvbVnSF9Af8x7p5MzbJ90Ioz/9TI41/hTCvznF/loiSzn8w==", + "requires": { + "jws": "^3.2.2", + "lodash.includes": "^4.3.0", + "lodash.isboolean": "^3.0.3", + "lodash.isinteger": "^4.0.4", + "lodash.isnumber": "^3.0.3", + "lodash.isplainobject": "^4.0.6", + "lodash.isstring": "^4.0.1", + "lodash.once": "^4.0.0", + "ms": "^2.1.1", + "semver": "^5.6.0" + }, + "dependencies": { + "ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + } + } + }, + "jwa": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz", + "integrity": "sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==", + "requires": { + "buffer-equal-constant-time": "1.0.1", + "ecdsa-sig-formatter": "1.0.11", + "safe-buffer": "^5.0.1" + } + }, + "jws": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz", + "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==", + "requires": { + "jwa": "^1.4.1", + "safe-buffer": "^5.0.1" + } + }, "locate-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", @@ -2193,6 +2356,41 @@ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz", "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==" }, + "lodash.includes": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz", + "integrity": "sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w==" + }, + "lodash.isboolean": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz", + "integrity": "sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg==" + }, + "lodash.isinteger": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz", + "integrity": "sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA==" + }, + "lodash.isnumber": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz", + "integrity": "sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw==" + }, + "lodash.isplainobject": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", + "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==" + }, + "lodash.isstring": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", + "integrity": "sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==" + }, + "lodash.once": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", + "integrity": "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==" + }, "long": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz", diff --git a/package.json b/package.json index e52786c..d7b1bca 100644 --- a/package.json +++ b/package.json @@ -13,6 +13,7 @@ "ejs": "~2.6.1", "express": "~4.16.1", "http-errors": "~1.6.3", + "jsonwebtoken": "^8.5.1", "morgan": "~1.9.1", "mysql2": "^2.2.3", "sequelize": "^6.3.5" From ee098d47818a31203808b3e95dca08c60b73988b Mon Sep 17 00:00:00 2001 From: sergio17 Date: Fri, 16 Sep 2022 13:31:14 -0500 Subject: [PATCH 2/6] helpers generate JWT ok --- helpers/generar-jwt.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/helpers/generar-jwt.js b/helpers/generar-jwt.js index 808c354..f7238ab 100644 --- a/helpers/generar-jwt.js +++ b/helpers/generar-jwt.js @@ -8,7 +8,7 @@ const generarJWT = (email) => { payload, process.env.SECRETORPRIVATEKEY, { - expiresIn: '24h', + expiresIn: '4h', }, (err, token) => { if (err) { From 1d1b4014f0f2e3f89bbe07b3a06bf2ef613effa5 Mon Sep 17 00:00:00 2001 From: sergio17 Date: Fri, 16 Sep 2022 16:03:39 -0500 Subject: [PATCH 3/6] middleware validate JWT ok --- middlewares/validar_jwt.js | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 middlewares/validar_jwt.js diff --git a/middlewares/validar_jwt.js b/middlewares/validar_jwt.js new file mode 100644 index 0000000..a551f65 --- /dev/null +++ b/middlewares/validar_jwt.js @@ -0,0 +1,31 @@ +const { Request, Response, NextFunction } = require('express'); +const jwt = require('jsonwebtoken'); + +const validarJWT = async ( + req = Request, + res = Response, + next = NextFunction +) => { + try { + const authorization = req.get('Authorization'); + let token = ''; + + if (authorization && authorization.toLowerCase().startsWith('bearer')) { + token = authorization.substring(7); + } + + const decodeToken = await jwt.verify(token, process.env.SECRETORPRIVATEKEY); + + if (!token || !decodeToken.email) { + res.status(401).json({ msg: 'token missing or invalid' }); + } + + next(); + } catch (error) { + res.status(401).send(error); + } +}; + +module.exports = { + validarJWT, +}; From 190018a67cbd8e2a40961658f22f15b413be0851 Mon Sep 17 00:00:00 2001 From: sergio17 Date: Sun, 18 Sep 2022 15:44:05 -0500 Subject: [PATCH 4/6] OOP TRANSFORMING --- middlewares/validar_jwt.js | 11 +++++++++++ models/user.js | 1 + routes/index.js | 20 ++++++++++++++++++++ 3 files changed, 32 insertions(+) diff --git a/middlewares/validar_jwt.js b/middlewares/validar_jwt.js index a551f65..eb6fdba 100644 --- a/middlewares/validar_jwt.js +++ b/middlewares/validar_jwt.js @@ -1,5 +1,6 @@ const { Request, Response, NextFunction } = require('express'); const jwt = require('jsonwebtoken'); +const { User } = require('../models'); const validarJWT = async ( req = Request, @@ -16,12 +17,22 @@ const validarJWT = async ( const decodeToken = await jwt.verify(token, process.env.SECRETORPRIVATEKEY); + const userToken = await User.findAll({ + where: { + email: decodeToken.email + }, + attributes: ['roleId'] + }) + + console.log(userToken) + if (!token || !decodeToken.email) { res.status(401).json({ msg: 'token missing or invalid' }); } next(); } catch (error) { + throw error res.status(401).send(error); } }; diff --git a/models/user.js b/models/user.js index 824fa63..b535e34 100644 --- a/models/user.js +++ b/models/user.js @@ -21,6 +21,7 @@ module.exports = (sequelize, DataTypes) => { type: DataTypes.INTEGER, autoIncrement: true, allowNull: false, + primaryKey: true }, firstName: { type: DataTypes.STRING, diff --git a/routes/index.js b/routes/index.js index b2f0c91..dbc056e 100644 --- a/routes/index.js +++ b/routes/index.js @@ -1,8 +1,28 @@ var express = require('express'); +const { generarJWT } = require('../helpers/generar-jwt'); +const { validarJWT } = require('../middlewares/validar_jwt'); var router = express.Router(); /* GET home page. */ router.get('/', function(req, res, next) { res.render('index', { title: 'Express' }); }); + + +router.post('/login', async ( req , res ) => { + +const {email} = req.body + +const token = await generarJWT(email) + +res.send(token) + +}) + +router.get('/signup', validarJWT, async ( req , res ) => { + +res.send('prueba para validar jwt') + +}) + module.exports = router; From 749a5c2a62c0bac5afb478a56ad9e54afea3b964 Mon Sep 17 00:00:00 2001 From: sergio17 Date: Mon, 19 Sep 2022 16:21:46 -0500 Subject: [PATCH 5/6] JWT OOP logic in helpers --- helpers/Token.js | 49 ++++++++++++++++++++++++++++++++++++++ helpers/generar-jwt.js | 27 --------------------- middlewares/validar_jwt.js | 42 -------------------------------- routes/index.js | 22 +---------------- 4 files changed, 50 insertions(+), 90 deletions(-) create mode 100644 helpers/Token.js delete mode 100644 helpers/generar-jwt.js delete mode 100644 middlewares/validar_jwt.js diff --git a/helpers/Token.js b/helpers/Token.js new file mode 100644 index 0000000..4961aa9 --- /dev/null +++ b/helpers/Token.js @@ -0,0 +1,49 @@ +const jwt = require('jsonwebtoken'); + +class Token { + static generateJWT(email) { + return new Promise((resolve, reject) => { + const payload = { email }; + + jwt.sign( + payload, + process.env.SECRETORPRIVATEKEY, + { + expiresIn: '4h', + }, + (err, token) => { + if (err) { + reject('No fue posible generar el JWT'); + } else { + resolve(token); + } + } + ); + }); + } + + static decryptJWT(req, res) { + try { + const authorization = req.get('Authorization'); + let token = ''; + + if (authorization && authorization.toLowerCase().startsWith('bearer')) { + token = authorization.substring(7); + } + + const decodeToken = jwt.verify(token, process.env.SECRETORPRIVATEKEY); + + if (!token || !decodeToken.email) { + res.status(401); + } + + return decodeToken; + } catch (error) { + throw error; + } + } +} + +module.exports = { + Token, +}; diff --git a/helpers/generar-jwt.js b/helpers/generar-jwt.js deleted file mode 100644 index f7238ab..0000000 --- a/helpers/generar-jwt.js +++ /dev/null @@ -1,27 +0,0 @@ -const jwt = require('jsonwebtoken'); - -const generarJWT = (email) => { - return new Promise((resolve, reject) => { - const payload = {email}; - - jwt.sign( - payload, - process.env.SECRETORPRIVATEKEY, - { - expiresIn: '4h', - }, - (err, token) => { - if (err) { - console.log(err) - reject('No fue posible generar el JWT'); - } else { - resolve(token); - } - } - ); - }); -}; - -module.exports = { - generarJWT -} diff --git a/middlewares/validar_jwt.js b/middlewares/validar_jwt.js deleted file mode 100644 index eb6fdba..0000000 --- a/middlewares/validar_jwt.js +++ /dev/null @@ -1,42 +0,0 @@ -const { Request, Response, NextFunction } = require('express'); -const jwt = require('jsonwebtoken'); -const { User } = require('../models'); - -const validarJWT = async ( - req = Request, - res = Response, - next = NextFunction -) => { - try { - const authorization = req.get('Authorization'); - let token = ''; - - if (authorization && authorization.toLowerCase().startsWith('bearer')) { - token = authorization.substring(7); - } - - const decodeToken = await jwt.verify(token, process.env.SECRETORPRIVATEKEY); - - const userToken = await User.findAll({ - where: { - email: decodeToken.email - }, - attributes: ['roleId'] - }) - - console.log(userToken) - - if (!token || !decodeToken.email) { - res.status(401).json({ msg: 'token missing or invalid' }); - } - - next(); - } catch (error) { - throw error - res.status(401).send(error); - } -}; - -module.exports = { - validarJWT, -}; diff --git a/routes/index.js b/routes/index.js index dbc056e..7a2a561 100644 --- a/routes/index.js +++ b/routes/index.js @@ -1,28 +1,8 @@ var express = require('express'); -const { generarJWT } = require('../helpers/generar-jwt'); -const { validarJWT } = require('../middlewares/validar_jwt'); var router = express.Router(); /* GET home page. */ router.get('/', function(req, res, next) { res.render('index', { title: 'Express' }); }); - - -router.post('/login', async ( req , res ) => { - -const {email} = req.body - -const token = await generarJWT(email) - -res.send(token) - -}) - -router.get('/signup', validarJWT, async ( req , res ) => { - -res.send('prueba para validar jwt') - -}) - -module.exports = router; +module.exports = router; \ No newline at end of file From 08c767b35c372e6d9c81a9e642b3aa2c5468b5f0 Mon Sep 17 00:00:00 2001 From: sergio17 Date: Tue, 20 Sep 2022 16:51:07 -0500 Subject: [PATCH 6/6] JWT logic to ES6 --- helpers/Token.js | 26 ++++++++++---------------- 1 file changed, 10 insertions(+), 16 deletions(-) diff --git a/helpers/Token.js b/helpers/Token.js index 4961aa9..f1f94b1 100644 --- a/helpers/Token.js +++ b/helpers/Token.js @@ -1,25 +1,19 @@ const jwt = require('jsonwebtoken'); +const {sign} = require('jsonwebtoken'); class Token { static generateJWT(email) { - return new Promise((resolve, reject) => { + try { const payload = { email }; - jwt.sign( - payload, - process.env.SECRETORPRIVATEKEY, - { - expiresIn: '4h', - }, - (err, token) => { - if (err) { - reject('No fue posible generar el JWT'); - } else { - resolve(token); - } - } - ); - }); + const token = sign(payload, process.env.SECRETORPRIVATEKEY, { + expiresIn: '4h', + }); + + return token; + } catch (error) { + throw error; + } } static decryptJWT(req, res) {