#6264 - renewToken #1824
|
@ -1,5 +1,8 @@
|
|||
const tokenConfig = require('./token-config');
|
||||
|
||||
module.exports = async token => {
|
||||
jsegarra marked this conversation as resolved
Outdated
|
||||
const accessTokenConfig = await tokenConfig();
|
||||
|
||||
module.exports = async(token, accessTokenConfig) => {
|
||||
const now = new Date();
|
||||
const differenceMilliseconds = now - token.created;
|
||||
const differenceSeconds = Math.floor(differenceMilliseconds / 1000);
|
||||
|
|
|
@ -1,5 +1,7 @@
|
|||
const UserError = require('vn-loopback/util/user-error');
|
||||
const handlePromiseLogout = (Self, {id}, courtesyTime = 60) => {
|
||||
const tokenConfig = require('./token-config');
|
||||
const DEFAULT_COURTESY_TIME = 60;
|
||||
const handlePromiseLogout = (Self, {id}, courtesyTime = DEFAULT_COURTESY_TIME) => {
|
||||
jsegarra marked this conversation as resolved
Outdated
jgallego
commented
he visto el accessTokenConfig = 60 en las fixtures, no conviene quitarlo de aquí para no tener valores en el código? he visto el accessTokenConfig = 60 en las fixtures, no conviene quitarlo de aquí para no tener valores en el código?
jsegarra
commented
Se utiliza como valor por defecto del parámetro courtesyTime de una línea más abajo. Esto se hace, por si, se diese el caso que el valor en BD está a nulo. Se utiliza como valor por defecto del parámetro courtesyTime de una línea más abajo.
Esto se hace, por si, se diese el caso que el valor en BD está a nulo.
|
||||
new Promise(res => {
|
||||
jsegarra marked this conversation as resolved
Outdated
jgallego
commented
tras la conversación asumimos que courtesy estará en la tabla definido tras la conversación asumimos que courtesy estará en la tabla definido
|
||||
setTimeout(() => {
|
||||
res(Self.logout(id));
|
||||
|
@ -23,14 +25,13 @@ module.exports = Self => {
|
|||
});
|
||||
|
||||
Self.renewToken = async function(ctx) {
|
||||
const models = Self.app.models;
|
||||
const token = ctx.req.accessToken;
|
||||
const {accessToken: token} = ctx.req;
|
||||
|
||||
// Check if current token is valid
|
||||
const isValid = await Self.validateToken(token);
|
||||
if (!isValid) throw new UserError(`The renew period has not been exceeded`, 'periodNotExceeded');
|
||||
jsegarra marked this conversation as resolved
Outdated
juan
commented
El método validateToken solo se llama desde aquí en toda la aplicación, puede eliminarse y poner su código directamente aquí. El método validateToken solo se llama desde aquí en toda la aplicación, puede eliminarse y poner su código directamente aquí.
jsegarra
commented
Era la idea, pero no la seguí porque había un remoteMethod de validateToken y asumí que si existía seria por algo y había que aprovecharlo. Consideras que deberíamos mover la lógica de ese método a este y eliminarlo? Era la idea, pero no la seguí porque había un remoteMethod de validateToken y asumí que si existía seria por algo y había que aprovecharlo.
Consideras que deberíamos mover la lógica de ese método a este y eliminarlo?
jgallego
commented
Si ves que sólo se llama desde aquí sí. Si ves que sólo se llama desde aquí sí.
|
||||
const fields = ['courtesyTime'];
|
||||
const {courtesyTime} = await models.AccessTokenConfig.findOne({fields});
|
||||
|
||||
const {courtesyTime} = await tokenConfig();
|
||||
|
||||
jsegarra marked this conversation as resolved
Outdated
juan
commented
Para que se selecciona Para que se selecciona `renewPeriod` si luego no se utiliza?
jsegarra
commented
Oh, tienes razón la línea venia heredada de otro sitio Oh, tienes razón la línea venia heredada de otro sitio
|
||||
// Schedule to remove current token
|
||||
handlePromiseLogout(Self, token, courtesyTime);
|
||||
|
|
|
@ -0,0 +1,9 @@
|
|||
const DEFAULT_FIELDS = ['renewPeriod', 'courtesyTime'];
|
||||
jsegarra marked this conversation as resolved
Outdated
alexm
commented
Esto lo haces por hacer solo una vez la peticion? Esto lo haces por hacer solo una vez la peticion?
jsegarra
commented
Correcto, porque al final la config no va a cambiar y hacer tantas peticiones a la misma info... :( Correcto, porque al final la config no va a cambiar y hacer tantas peticiones a la misma info... :(
|
||||
const {models} = require('vn-loopback/server/server');
|
||||
let currentAccessTokenConfig = null;
|
||||
module.exports = async(fields = DEFAULT_FIELDS) => {
|
||||
if (currentAccessTokenConfig) return currentAccessTokenConfig;
|
||||
const accessTokenConfig = await models.AccessTokenConfig.findOne({fields});
|
||||
if (!accessTokenConfig) currentAccessTokenConfig = accessTokenConfig;
|
||||
return accessTokenConfig;
|
||||
};
|
||||
jsegarra marked this conversation as resolved
Outdated
juan
commented
Utilizar directamente Utilizar directamente `await models.AccessTokenConfig.findOne()` en los ficheros js que incluyan a este. En el directorio methods solo deberían haber ficheros con métodos de la API rest.
|
|
@ -14,9 +14,7 @@ module.exports = Self => {
|
|||
});
|
||||
|
||||
Self.validateToken = async function(token) {
|
||||
const fields = ['renewPeriod', 'courtesyTime'];
|
||||
const accessTokenConfig = await Self.app.models.AccessTokenConfig.findOne({fields});
|
||||
const isValid = await isTokenValid(token, accessTokenConfig);
|
||||
const isValid = await isTokenValid(token);
|
||||
return isValid;
|
||||
};
|
||||
};
|
||||
|
|
Creo que se seria mas correcto usar vnNew()
Mas info: https://wiki.verdnatura.es/index.php/Fechas
Okey, tomo nota.
Lo extraje de lo que hay actualmente de renew-token