#6264 - renewToken #1824

Merged
jsegarra merged 36 commits from 6264-renewToken into dev 2023-12-20 09:22:29 +00:00
4 changed files with 20 additions and 9 deletions
Showing only changes of commit 67faf076d2 - Show all commits

View File

@ -1,5 +1,8 @@
const tokenConfig = require('./token-config');
module.exports = async token => {
jsegarra marked this conversation as resolved Outdated
Outdated
Review

Creo que se seria mas correcto usar vnNew()

Mas info: https://wiki.verdnatura.es/index.php/Fechas

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

Okey, tomo nota. Lo extraje de lo que hay actualmente de renew-token
const accessTokenConfig = await tokenConfig();
module.exports = async(token, accessTokenConfig) => {
const now = new Date();
const differenceMilliseconds = now - token.created;
const differenceSeconds = Math.floor(differenceMilliseconds / 1000);

View File

@ -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

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?

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

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
Outdated
Review

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í.

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?

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
Outdated
Review

Para que se selecciona renewPeriod si luego no se utiliza?

Para que se selecciona `renewPeriod` si luego no se utiliza?

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

View File

@ -0,0 +1,9 @@
const DEFAULT_FIELDS = ['renewPeriod', 'courtesyTime'];
jsegarra marked this conversation as resolved Outdated
Outdated
Review

Esto lo haces por hacer solo una vez la peticion?

Esto lo haces por hacer solo una vez la peticion?

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
Outdated
Review

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.

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.

View File

@ -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;
};
};