From 755c5c6fa8a36597c64a4afbab116f27a5066413 Mon Sep 17 00:00:00 2001 From: david Date: Tue, 9 Jul 2019 14:52:22 +0200 Subject: [PATCH] Acceso JWT implementado --- config/environments/development.js | 2 +- config/environments/production.js | 2 +- core/passport.js | 25 +++++++++---------------- helpers/security.helper.js | 3 +-- modules/auth/auth.routes.js | 6 ++++++ package.json | 2 +- server.js | 2 +- 7 files changed, 20 insertions(+), 22 deletions(-) diff --git a/config/environments/development.js b/config/environments/development.js index 697eda5..2edf012 100644 --- a/config/environments/development.js +++ b/config/environments/development.js @@ -9,7 +9,7 @@ module.exports = { session: { secret_token: process.env.SECRET_TOKEN || "B57J=7B`NQ$y98|~5;hc715bo09^5oz8NR+]n9r~215B91Nd9P%25_N6r!GHcOKp|18y5-73Dr5^@9k7n]5l<-41D1o", - token_expires_in: '300' + token_expires_in: '12h' }, server: { diff --git a/config/environments/production.js b/config/environments/production.js index 7be80cb..00b6f74 100644 --- a/config/environments/production.js +++ b/config/environments/production.js @@ -9,7 +9,7 @@ module.exports = { session: { secret_token: process.env.SECRET_TOKEN || "B57J=7B`NQ$y98|~5;hc715bo09^5oz8NR+]n9r~215B91Nd9P%25_N6r!GHcOKp|18y5-73Dr5^@9k7n]5l<-41D1o", - token_expires_in: '300' + token_expires_in: '12h' }, server: { diff --git a/core/passport.js b/core/passport.js index 45ccf24..691e4a0 100644 --- a/core/passport.js +++ b/core/passport.js @@ -1,7 +1,7 @@ const _ = require('lodash'); const passport = require('passport'); const { Strategy: LocalStrategy } = require('passport-local'); -const { Strategy: JWTStrategy} = require('passport-jwt'); +const { Strategy: CustomStrategy } = require('passport-custom'); const models = require('./models'); const securityHelper = require('../helpers/security.helper'); @@ -104,22 +104,15 @@ console.log('>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>><'); } })); -// JWT -passport.use('jwt', new JWTStrategy(securityHelper.jwtOptions, async (jwtPayload, done) => { - try { - const user = await models.User.findOne({ - attributes: { exclude: [ 'password' ] }, - where: { id: jwtPayload.id }, - raw: true - }); - if (_.isNull(user)) { - return done(null, false, { message: 'User not found' }) - } else { - return done(null, user, { message: 'User found' }); - } - } catch (error) { - return done(error); +// JWT +passport.use('jwt', new CustomStrategy(async (req, done) => { + const token = ((req && req.headers && req.headers['x-access-token']) ? req.headers['x-access-token'] : null); + console.log(token); + if (!token) { + return done(null, false, { message: 'Unauthorized'}); } + + return done(null, securityHelper.verify(token)); })); diff --git a/helpers/security.helper.js b/helpers/security.helper.js index 09ab737..f5fda87 100644 --- a/helpers/security.helper.js +++ b/helpers/security.helper.js @@ -8,7 +8,6 @@ const config = require('../config'); const privateKEY = fs.readFileSync(path.join(__dirname, '..', 'private.key'), 'utf8'); const publicKEY = fs.readFileSync(path.join(__dirname, '..', 'public.key'), 'utf8'); - const signOptions = { issuer: 'Fundación LQDVI', subject: 'info@loquedeverdadimporta.org', @@ -92,7 +91,7 @@ const _decode = (token) => { module.exports = { jwtOptions: { - jwtFromRequest: (req) => ((req && req.headers && req.headers['x-access-token']) ? req.headers['x-access-token'] : null), + jwtFromRequest: (req) => { console.log(req.headers); return ((req && req.headers && req.headers['x-access-token']) ? req.headers['x-access-token'] : null) }, secretOrKey: publicKEY, ...signOptions, }, diff --git a/modules/auth/auth.routes.js b/modules/auth/auth.routes.js index 16d2e72..ed9b89f 100644 --- a/modules/auth/auth.routes.js +++ b/modules/auth/auth.routes.js @@ -35,6 +35,7 @@ routes.get('/test_jwt', AccessValidator.isLoggedUser, } ); + routes.post('/token', authController.regenerateToken, ); @@ -43,5 +44,10 @@ routes.post('/token/reject', authController.rejectToken, ); +routes.post('/prueba', AccessValidator.isLoggedUser, + function (req, res) { + res.json({ success: 'You are authenticated with JWT!', user: req.user }) + } +); module.exports = routes; \ No newline at end of file diff --git a/package.json b/package.json index 22bc178..16d8d24 100644 --- a/package.json +++ b/package.json @@ -44,7 +44,7 @@ "node-fetch": "^2.3.0", "os": "^0.1.1", "passport": "^0.4.0", - "passport-jwt": "^4.0.0", + "passport-custom": "^1.0.5", "passport-local": "^1.0.0", "path": "^0.12.7", "pino": "^4.7.1", diff --git a/server.js b/server.js index 0345504..0fd316a 100644 --- a/server.js +++ b/server.js @@ -49,7 +49,7 @@ server.on('error', err => { }); try { - models.sequelize.sync({ force: false }).then(() => { + models.sequelize.sync({ force: true }).then(() => { // Launch server. server.listen(currentState.port, (err) => { if (err) {