Tengo un proyecto con NodeJS con jwt para administrar la autenticación de usuarios. Después de un período de tiempo, mi aplicación deja de funcionar y mi servidor imprime lo siguiente:
return done(new TokenExpiredError('jwt expired', new Date(payload.exp * 1000))); ^ TokenExpiredError: jwt expiredAhora, la persona que estaba trabajando en este proyecto antes que yo tenía este código para administrar los tokens:
static generateToken(username, type, id) { return jwt.sign( { username, type, id }, API_SECRET, { expiresIn: '7d' } ); } static generateRefreshToken(username, type, id) { return jwt.sign( { username, type, id }, API_SECRET_REFRESH, { expiresIn: '30d' } ); } Supongo que el problema es expiresIn: '7d' (ya que soy bastante nuevo con jwt). También sé qué podemos omitir en el campo expiresIn para que el token no caduque en absoluto. Mi pregunta es: ¿es seguro omitir dicho campo o hay otra forma de abordar este tipo de mensaje de error? Dado que cada vez que aparece ese mensaje, tengo que eliminar todo el historial de navegación de mi navegador (o ejecutar mi proyecto en modo de incógnito) para que comience a funcionar nuevamente.
Si, este es uno de los problemas más comunes, es posible solucionarlo con un token de refresco, lo que hace esta función es que cuando el token caduca, se hace una solicitud desde el frente para obtener uno nuevo, aquí hay un enlace con un ejemplo de implementación en el nodo js:
No debe crear un token que no caduque. Por lo tanto, debe mantener la configuración expiresIn .
Dicho esto, no tiene que usar la estrategia de refresh token . Hay muchas maneras de manejar esto. Por ejemplo, puede hacer lo siguiente:
/check-token que verificará si el token actual sigue siendo válido./check-token . Si el token actual no es válido, cierre la sesión del usuario. Si el token actual es válido, genere un nuevo token que será válido por otros 7 días y continúe autenticando al usuario con un nuevo token.