Búsqueda de sitios web

javascript - ¿Cómo importar TokenExpiredError lanzado por verify de jsonwebtoken?


Me gustaría comprobar si el tipo de un Error es TokenExpiredError lanzado por la función jwt.verify de la biblioteca jsonwebtoken usando instanceof de Typescript, por ejemplo.

import jwt from "jsonwebtoken";

function someFunction() {
    try {
        return jwt.verify(token, key);
    }catch(err) {
        if(err instanceof TokenExpiredError) {
            return attemptRenewal()
        }
        throw err
    }
}

¿Cómo puedo importar el símbolo TokenExpiredError?

No encuentro ninguna documentación sobre esta clase importante y lo único intuitivo que se me ocurre

import { jwt, TokenExpiredError } from "jsonwebtoken";

causa que jwt sea undefined.

Estoy al tanto de soluciones alternativas como realizar una comparación de cadenas con el nombre de la clase, pero me gustaría producir un código limpio.

Estoy usando jsonwebtoken 8.5.1.

Respuesta #1

Tenía la misma consulta, pero después de una búsqueda y prueba rápida, lo siguiente debería funcionar

import * as jwt from "jsonwebtoken";

function someFunction() {
    try {
        return jwt.verify(token, key);
    }catch(err) {
        if(err instanceof jwt.TokenExpiredError) {
            return attemptRenewal()
        }
        throw err
    }
}

TokenExpiredError ya ha sido importado como parte del jwt.

Respuesta #2

jsonwebtoken exporta un objeto por defecto como: origen

module.exports = {
  decode: require('./decode'),
  verify: require('./verify'),
  sign: require('./sign'),
  JsonWebTokenError: require('./lib/JsonWebTokenError'),
  NotBeforeError: require('./lib/NotBeforeError'),
  TokenExpiredError: require('./lib/TokenExpiredError'),
};

Esto significa que, cuando usas la sintaxis import jwt from "jsonwebtoken";, jwt vendrá como un objeto con todas las propiedades de la exportación por defecto.

No puedes usar import { jwt, TokenExpiredError } from "jsonwebtoken";, porque en el objeto de exportación por defecto, no tenemos la propiedad jwt,

Si deseas importar TokenExpiredError y el objeto por defecto, puedes seguir una sintaxis como: import jwt, {TokenExpiredError} from "jsonwebtoken";, entonces jwt sigue siendo el objeto exportado por defecto, y tienes el objeto TokenExpiredError (jwt.TokenExpiredError y TokenExpiredError son lo mismo).

Si solo quieres usar la función verify y TokenExpiredError, la línea de importación será: import {TokenExpiredError, verify} from "jsonwebtoken";, luego tu función será así:

import {TokenExpiredError, verify} from "jsonwebtoken";

function someFunction() {
  try {
    return verify(token, key);
  } catch (err) {
    if (err instanceof TokenExpiredError) {
      return attemptRenewal()
    }
    throw err
  }
}

Artículos relacionados