【问题标题】:Cannot get payload data from jsonwebtoken in node无法从节点中的 jsonwebtoken 获取有效负载数据
【发布时间】:2020-09-23 04:45:10
【问题描述】:

我在节点 10.16.0 上使用 jsonwebtoken 8.5.1。到目前为止我的代码是

jwt.sign(
  {  
    role:'role'
  }, 
  key, 
  {  
    issuer:'hey',          
    subject:username,
    expiresIn:Math.floor(Date.now() / 1000) + 604800
  }, 
  function(err, token) {
    if (err) {rejected('token related error');}
    resolved({token:token});  // is inside a promise, so I use resolved/rejected
  }
);

至少,我是这么理解的,第一部分是有效载荷,你可以包含任何你喜欢的数据。

然后我的代码来验证它

jwt.verify(token, key,function(err, decoded) {
  if (err){
    console.log('VERIFY ERROR', err); 
  } 
  if (decoded){ 
    console.log('VERIFY', decoded.role); 
  } 
});

当我尝试验证它时,我没有收到任何错误,但decoded.role 部分返回undefined,它应该返回role

我错过了什么?请指教

谢谢

【问题讨论】:

  • 对我来说看起来不错,无法重现错误。在jwt.io 上检查您在第一部分中生成的令牌,并确保包含该角色。旁注:为什么你的令牌有效期到 2070 年 11 月 13 日?

标签: node.js jwt


【解决方案1】:

对我来说很好用:

const jwt = require('jsonwebtoken');

const key = 'secret';
const username = 'username';

new Promise((resolved, rejected) => {

    jwt.sign(
        {
            role:'role'
        },
        key,
        {
            issuer:'hey',
            subject: username,
            expiresIn:Math.floor(Date.now() / 1000) + 604800
        },
        function(err, token) {
            if (err) {rejected('token related error');}
            resolved({token:token});  // is inside a promise, so I use resolved/rejected
        });
}).then(verify);


function verify({token}) {
    jwt.verify(token, key,function(err, decoded) {
        if (err){
            console.log('VERIFY ERROR', err);
        }
        if (decoded){
            console.log('VERIFY', decoded.role);
        }
    });
}

只需确保您使用的是令牌本身,而不是包裹在其周围的对象。您可能已经注意到,我正在像 {token} 这样的 verify 函数中解构令牌。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-04-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多