Jsonwebtoken验证始终只返回{iat:xxx}

时间:2016-08-09 07:00:40

标签: node.js json-web-token express-jwt

根据文档https://github.com/auth0/node-jsonwebtoken#jwtverifytoken-secretorpublickey-options-callbackjwt.verify将返回解码有效负载,我运行简单脚本:

var token = jwt.sign({email: req.body.email,}, 's3cr3t');
var decoded = jwt.verify(token, 's3cr3t');
console.log(decoded)

但它只输出如:{ iat: 1470725598 }

我希望输出应该像{email: myemail@domain.com,}

我有什么遗失的吗?

2 个答案:

答案 0 :(得分:5)

在我将属性req.body.email设置为undefined之前,我无法模仿您的问题。

示例:

var jwt = require('jsonwebtoken');
var token = jwt.sign({email: undefined}, 's3cr3t');
var decoded = jwt.verify(token, 's3cr3t'); 

由于未定义,输出将如下所示;

  

{iat:1470727340}

这与您所拥有的完全匹配,这使我怀疑您的主要问题只是属性req.body.emailundefined

假设req.body.email被正确设置为“myemail@domain.com”,那么输出将是;

  

{email:'myemail@domain.com',iat:1470727500}

这里只是旁注。您可能需要考虑将.verify方法包装在try-catch子句中,如文档中所示。这对于在令牌无效时验证和抛出错误非常有用。

答案 1 :(得分:0)

验证函数采用第三个参数function (err, decoded)。 您的代码应如下所示:

jwt.verify (token, "s3cr3t", function (err, decoded) {
    if (err) throw err;

    // decoded object with your data
}