根据文档https://github.com/auth0/node-jsonwebtoken#jwtverifytoken-secretorpublickey-options-callback,jwt.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,}
我有什么遗失的吗?
答案 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.email
已undefined
。
假设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
}