【问题标题】:NodeJS can't get error message from jsonwebtokenNodeJS 无法从 jsonwebtoken 获取错误消息
【发布时间】:2021-08-19 15:59:02
【问题描述】:

这是我第一次将 jwt 与 npm jsonwebtoken 一起使用,这是我的代码:

//create a token for user
const token = jwt.sign({ _id: user._id, email:user.email }, 'secret', { issuer:'Dio', expiresIn: '1h' })

//get the token from req.header
const token = req.header('Authorization').replace('Bearer ', '')
jwt.verify(token, "secret", (err, decode)=>{
    try{
        console.log(decode);
    }catch(err){
        console.log(err);
    }
})

认证失败时,总是打印出“undefined”。

然后我尝试其他方法:

jwt.verify(token, "secret", (err, decode)=>{
    if(err){
        console.log(err);
    }else{
        console.log(decode);
    }
})

当令牌正确时它可以正常工作,否则我会收到如下错误消息:

JsonWebTokenError: invalid token

SyntaxError: Unexpected token ȗ in JSON at position 0

但我希望能得到npm文档中显示的信息如:

err = {
    name: 'TokenExpiredError',
    message: 'jwt expired',
    expiredAt: 1408621000
  }

【问题讨论】:

  • 您也可以包含令牌...可能更容易协助...
  • 谢谢,我已经编辑了我的问题以使其更清楚。

标签: node.js jwt


【解决方案1】:

代码块 1

尝试 catch 不会那样工作。没有错误,因此它永远不会出现在 catch 语句中。回调只是函数。这里它接受两个参数,其中没有未捕获或捕获的异常或错误。

因此它将始终打印console.log(decode);,并且它将是未定义,因为您的令牌无效或过期。

代码块 2

它应该打印错误。你在这里有无效的语法({ 在 if 之后丢失)所以这就是异常的原因。

jwt.verify(olderToken, "lololol", (err, decode) => {
    if (err) {
        console.log(err);
    } else {
        console.log(decode);
    }
})

【讨论】:

  • 对不起,我错过了左括号,我的问题仍然存在
  • 那你的问题是什么?问题是为什么它未定义或存在异常?抱歉,如果我在这里遗漏了什么。
  • 我再次编辑了我的问题,希望这能帮助您理解我的问题。
  • 我想我明白了,我真的很愚蠢。很抱歉让您感到困惑。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-02-14
  • 2016-07-19
  • 1970-01-01
  • 2023-04-08
  • 2023-04-03
相关资源
最近更新 更多