【问题标题】:jwt.decode() stuck instead of returning an error on malformed tokenjwt.decode() 卡住而不是在格式错误的令牌上返回错误
【发布时间】:2021-01-09 17:28:12
【问题描述】:

在 express nodejs 服务器上,我尝试使用 jsonwebtoken 包 (v8.5.1) 验证令牌。我遇到了一些非常奇怪的事情,似乎没有找到解决办法。

每当我尝试验证格式错误的令牌时,jwt.verify 方法都会卡住,而不是抛出我预期的通常错误。有人可以指出我做错了什么。在下面你会发现完全卡住的代码。

token有效时,console.log语句返回jwt的内容。当它无效时,console.log 语句永远不会运行,并且端点永远不会响应。所以由于某种原因,它完全卡在了 jwt.verify 方法上。

router.post('/session', async (req, res) => {
  try {
    const token = req.headers['x-auth-token'];
    if (!token) {
      return res.json(false);
    }

    const verified = jwt.verify(token, process.env.JWT_SECRET);
    console.log(verified);
    if (!verified) {
      return res.json(false);
    }
    return res.json(true);
  } catch (e) {
    return res.status(500);
  }
});

【问题讨论】:

    标签: javascript node.js jwt


    【解决方案1】:

    嘿,在这种情况下,我建议使用 promisify 并等待 promise 抛出错误。

     const verified = await promisify(jwt.verify)(req.params.token, process.env.JWT_SECRET);

    使用这个 require 语句:

    const { promisify } = require('util');

    您可以查看 node.js 文档

    【讨论】:

      【解决方案2】:

      我仍然不知道它为什么会这样,但至少我找到了一种解决方法,当令牌不正确时会立即回答,而不是什么都不返回。

      我在 jwt.verify 函数中添加了一个回调:

      const verified = jwt.verify(
            token,
            process.env.JWT_SECRET,
            (err, verified) => {
              if (err) {
                return res.status(401).json('Error');
              }
              return verified;
            }
          );

      【讨论】:

        猜你喜欢
        • 2017-12-10
        • 2018-03-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-07-01
        • 2020-12-08
        • 2010-11-04
        相关资源
        最近更新 更多