6

根据文档,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,}

有什么我想念的吗?

4

2 回答 2

16

在我将属性设置req.body.emailundefined.

例子:

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

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

{ iat: 1470727340 }

这与您所拥有的完全匹配,这使我怀疑您的主要问题只是与财产req.body.email有关undefined

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

{ 电子邮件:'myemail@domain.com',iat:1470727500 }

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

于 2016-08-09T07:25:12.410 回答
0

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

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

    // decoded object with your data
}
于 2016-08-09T07:18:46.913 回答