Implementación de refresh token
This commit is contained in:
parent
1362478998
commit
9a279c966f
@ -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: '99d'
|
||||
token_expires_in: '5'
|
||||
},
|
||||
|
||||
server: {
|
||||
|
||||
@ -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: '24h'
|
||||
token_expires_in: '5'
|
||||
},
|
||||
|
||||
server: {
|
||||
|
||||
@ -1,6 +1,7 @@
|
||||
const fs = require('fs');
|
||||
const path = require('path');
|
||||
const jwt = require('jsonwebtoken');
|
||||
const randtoken = require('rand-token');
|
||||
const bCrypt = require('bcrypt');
|
||||
const config = require('../config');
|
||||
|
||||
@ -53,7 +54,10 @@ const _sign = (payload, options) => {
|
||||
algorithm: "RS256"
|
||||
};
|
||||
|
||||
return jwt.sign(payload, privateKEY, signOptions);
|
||||
const token = jwt.sign(payload, privateKEY, signOptions);
|
||||
const refreshToken = randtoken.uid(256);
|
||||
refreshToken[refreshToken] = payload;
|
||||
return { token, refreshToken };
|
||||
}
|
||||
|
||||
const _verify = (token, options) => {
|
||||
|
||||
@ -15,12 +15,6 @@ const authService = require('./auth.service');
|
||||
// Module Name
|
||||
const MODULE_NAME = '[auth.controller]';
|
||||
|
||||
// Error Messages
|
||||
const NOT_FOUND = 'Videogame not found';
|
||||
|
||||
// Success Messages
|
||||
const VG_CT_VIDEOGAME_DELETED_SUCCESSFULLY = 'Videogame deleted successfully';
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
// PUBLIC METHODS
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
@ -32,8 +26,11 @@ async function login(req, res, next) {
|
||||
email: req.user.email
|
||||
};
|
||||
|
||||
res.json({
|
||||
token: securityHelper.generateToken(data),
|
||||
const tokens = securityHelper.generateToken(data);
|
||||
|
||||
res.status(httpStatus.OK).json({
|
||||
token: tokens.token,
|
||||
refreshToken: tokens.refreshToken,
|
||||
user: data,
|
||||
});
|
||||
} catch (error) {
|
||||
@ -43,37 +40,67 @@ async function login(req, res, next) {
|
||||
|
||||
async function register(req, res, next) {
|
||||
try {
|
||||
console.log('>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>regsitro');
|
||||
console.log('>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>regsitro');
|
||||
|
||||
const values = {
|
||||
phone: req.body.phone,
|
||||
platform: req.body.fbuid
|
||||
};
|
||||
const token = securityHelper.generateToken(values);
|
||||
const tokens = securityHelper.generateToken(values);
|
||||
console.log(tokens)
|
||||
|
||||
const data = {
|
||||
token : token,
|
||||
token: tokens.refreshToken,
|
||||
phone: req.body.phone,
|
||||
fbuid: req.body.fbuid,
|
||||
email: req.body.email,
|
||||
name: req.body.name,
|
||||
surname: req.body.surname,
|
||||
entityid: req.body.entityid,
|
||||
accessibility: req.body.accessibility
|
||||
accessibility: req.body.accesssibility
|
||||
};
|
||||
console.log(data);
|
||||
res.json({
|
||||
user: await authService.extraMethods.createUser(data),
|
||||
});
|
||||
|
||||
|
||||
const newUser = await authService.extraMethods.createUser(data);
|
||||
const result = {
|
||||
token: 'JWT ' + tokens.token,
|
||||
user: newUser,
|
||||
};
|
||||
console.log(result);
|
||||
return controllerHelper.handleResultResponse(result, null, req.params, res, httpStatus.OK);
|
||||
} catch (error) {
|
||||
controllerHelper.handleErrorResponse(MODULE_NAME, register.name, error, res)
|
||||
console.log(error);
|
||||
controllerHelper.handleErrorResponse(MODULE_NAME, register.name, error, res);
|
||||
}
|
||||
}
|
||||
|
||||
async function regenerateToken(req, res, next) {
|
||||
const refreshToken = req.body.refreshToken;
|
||||
const phone = req.body.phone;
|
||||
const user = await authService.extraMethods.findUserByRefreshToken(refreshToken);
|
||||
|
||||
if (user && user.phone === phone) {
|
||||
const values = {
|
||||
phone: user.phone,
|
||||
platform: user.fbuid
|
||||
};
|
||||
|
||||
try {
|
||||
const tokens = securityHelper.generateToken(values);
|
||||
await authService.extraMethods.updateUserRefreshToken(user.id, tokens.refreshToken);
|
||||
const result = { token: 'JWT ' + tokens.token };
|
||||
return controllerHelper.handleResultResponse(result, null, req.params, res, httpStatus.OK);
|
||||
} catch(error) {
|
||||
controllerHelper.handleErrorResponse(MODULE_NAME, regenerateToken.name, error, res);
|
||||
}
|
||||
} else {
|
||||
return controllerHelper.handleResultResponse(null, null, req.params, res, httpStatus.UNAUTHORIZED);
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = {
|
||||
login,
|
||||
register,
|
||||
regenerateToken,
|
||||
MODULE_NAME
|
||||
}
|
||||
@ -29,4 +29,8 @@ routes.get('/pepepe', AccessValidator.isLoggedUser,
|
||||
}
|
||||
);
|
||||
|
||||
routes.post('/token',
|
||||
authController.regenerateToken,
|
||||
);
|
||||
|
||||
module.exports = routes;
|
||||
@ -17,6 +17,24 @@ const extraMethods = {
|
||||
return result;
|
||||
// });
|
||||
},
|
||||
|
||||
findUserByRefreshToken: async(refreshToken) => {
|
||||
return await models.User.findOne({
|
||||
where: {
|
||||
token: refreshToken,
|
||||
state: 'active'
|
||||
}
|
||||
})
|
||||
},
|
||||
|
||||
updateUserRefreshToken: async(userId, newRefreshToken) => {
|
||||
return await models.User.update(
|
||||
{ token: newRefreshToken },
|
||||
{ where: { id: userId }}
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
module.exports = {
|
||||
|
||||
@ -42,11 +42,11 @@ module.exports = function (sequelize, DataTypes) {
|
||||
defaultValue: true,
|
||||
},
|
||||
token: {
|
||||
type: DataTypes.STRING,
|
||||
type: DataTypes.STRING(512),
|
||||
},
|
||||
state: {
|
||||
type: DataTypes.STRING,
|
||||
defaultValue: 'borrador',
|
||||
defaultValue: 'active',
|
||||
},
|
||||
lastlogin: {
|
||||
type: DataTypes.DATE,
|
||||
|
||||
@ -48,6 +48,7 @@
|
||||
"passport-local": "^1.0.0",
|
||||
"path": "^0.12.7",
|
||||
"pino": "^4.7.1",
|
||||
"rand-token": "^0.4.0",
|
||||
"response-time": "^2.3.2",
|
||||
"sequelize": "^5.3.5",
|
||||
"vm": "^0.1.0",
|
||||
|
||||
Loading…
Reference in New Issue
Block a user