【问题标题】:How can I decode a token in Node.js? jwt.verify() fails如何在 Node.js 中解码令牌? jwt.verify() 失败
【发布时间】:2020-03-12 10:24:31
【问题描述】:

我正在尝试在 nodejs 中使用 jwt 解码令牌。这不起作用,每次我得到undefined 作为解码令牌。

这是我的代码:

const token  = req.headers.authorization.split(' ')[1];
const decodedToken = jwt.verify(token, 'RANDOM_TOKEN_SECRET');
const userId = decodedToken.userId;

console.log(decodedToken);
console.log(decodedToken.userId);

下面是邮递员的截图和我在console.log时得到的回复

【问题讨论】:

  • 你能检查令牌总是有值吗?
  • 我已经检查了好几次了。如果我 console.log() 令牌本身,我会得到一个值,但解码是问题。
  • console.log(token) 的输出是什么?在许多情况下,当人们问为什么他们的代码不工作时,实际上只是一个过期或无效的令牌。也许你只是在最后一行得到 undefined,因为它不包含 userId
  • 你在使用 Bearer 令牌吗?
  • 是的,我正在使用不记名令牌

标签: node.js jwt


【解决方案1】:

我发现了错误。在我编码/生成令牌时,我没有为属性 userId 提供值。这就是它声明它未定义的原因。

我必须进行一些更改,但效果很好。

           const token = jwt.sign(
              {userId: user.userid},
              'RANDOM_TOKEN_SECRET',
              {expiresIn: '24h'});

【讨论】:

    【解决方案2】:

    如果你想知道令牌中的内容,你必须这样做,这是一个选项:

    第一:

    nmp i jwt-decode
    

    第二:

    import jwt_decode  from 'jwt-decode';  // For ES6
    const jwt_decoder = require('jwt-decode'); // For classic node.js
    
    var token = "cnueownvwnqc..." // This is your token, you can send it from the frontend 
    
    var decoded = jwt_decode(token); // Decoding
    console.log(decode.userId); // Dictionary array
    

    【讨论】:

    • 不要使用 jwt.verify,因为这个函数不是解码器,它只是一个签名验证器。 - 这是不正确的!对于 OP 似乎使用的 node-jsonwebtoken 包,如果签名有效,verify 将返回解码的有效负载。 decode 只是解码,没有验证。
    • 好吧,在这种情况下,它可以通过两种方式完成,我评论它对我来说无需使用签名即可提取数据的答案,这在我的实现中更为优化。
    • decode 更适合您的用例没关系,但在您的回答中,您对verify 做出了错误的声明。我建议将其编辑为类似“而不是verify,如果你不验证,你也可以使用decode......”毕竟这甚至不是对OPs问题的答案,他们的问题只是一个在负载中找不到某些属性。
    • 好吧,我改变了答案¿更好?
    猜你喜欢
    • 2021-09-12
    • 2017-10-06
    • 2019-10-02
    • 2017-11-23
    • 1970-01-01
    • 2017-04-16
    • 2016-11-26
    • 2021-04-12
    相关资源
    最近更新 更多