如何导入jsonwebtoken的verify抛出的TokenExpiredError?

Posted

技术标签:

【中文标题】如何导入jsonwebtoken的verify抛出的TokenExpiredError?【英文标题】:How to import TokenExpiredError thrown by jsonwebtoken's verify? 【发布时间】:2019-10-11 05:18:36 【问题描述】:

我想通过jsonwebtoken库的jwt.verify函数使用Typescript的instanceof检查Error的类型是否为TokenExpiredError,例如

import jwt from "jsonwebtoken";

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

如何导入符号TokenExpiredError

我没有找到关于这个重要类的任何文档,也是我想到的唯一直观的类

import  jwt, TokenExpiredError  from "jsonwebtoken";

导致jwt 成为undefined

我知道使用类名进行字符串比较之类的解决方法,但我想生成干净的代码。

我正在使用jsonwebtoken 8.5.1。

【问题讨论】:

【参考方案1】:

我有同样的询问,但经过快速搜索和测试,下面应该可以工作

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 已作为 jwt 的一部分导入。

【讨论】:

【参考方案2】:

jsonwebtoken 导出默认对象,例如:source

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

这意味着,当您使用import jwt from "jsonwebtoken"; 语法时,jwt 将来到一个具有默认导出所有属性的对象。

您不能使用import jwt, TokenExpiredError from "jsonwebtoken";,因为在默认导出对象中,我们没有jwt 属性,

如果你想导入TokenExpiredError和默认对象,你可以遵循如下语法:import jwt, TokenExpiredError from "jsonwebtoken";,那么jwt仍然是默认导出对象,你有TokenExpiredError对象(jwt.TokenExpiredError和@ 987654333@同理)。

如果你只想使用verify函数和TokenExpiredError,导入行会变成:import TokenExpiredError, verify from "jsonwebtoken";,那么你的函数会是这样的:

import TokenExpiredError, verify from "jsonwebtoken";

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

【讨论】:

以上是关于如何导入jsonwebtoken的verify抛出的TokenExpiredError?的主要内容,如果未能解决你的问题,请参考以下文章

无论如何,NodeJS 都会抛出 `UNABLE_TO_VERIFY_LEAF_SIGNATURE`

为啥 jsonwebtoken 会抛出“无效签名”错误?

将 ObjectID 与 jwt.sign() 和 verify() 一起使用

如何使用打字稿通过`jsonwebtoken`获取令牌到期

JsonWebToken远程代码执行漏洞(CVE-2022-23529)

Moq:Mock.Verify()抛出NullReferenceException