Jsonwebtoken 始终验证 return 仅 {iat: xxx }
Jsonwebtoken verify always return only {iat: xxx }
根据文档,https://github.com/auth0/node-jsonwebtoken#jwtverifytoken-secretorpublickey-options-callback、jwt.verify
将 returns 解码负载,我 运行 简单脚本:
var token = jwt.sign({email: req.body.email,}, 's3cr3t');
var decoded = jwt.verify(token, 's3cr3t');
console.log(decoded)
但它只输出如下:{ iat: 1470725598 }
我希望输出应该像 {email: myemail@domain.com,}
有什么我遗漏的吗?
验证函数采用第三个参数,function (err, decoded)
。
您的代码应如下所示:
jwt.verify (token, "s3cr3t", function (err, decoded) {
if (err) throw err;
// decoded object with your data
}
在将 属性 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
子句中,如文档中所示。这对于在令牌无效时验证和抛出错误很有用。
我知道这是一个老问题,但没有明确的解决方案来说明如何重现该问题。我最近也遇到了同样的问题:Decoded values where like {iat:xxxz}
这是为什么:
发送没有“Content-type: application/json”的 post 请求将导致 req.body.email 未定义。这不是您尝试 jwt.verify 的值,因此出现意外行为。
解决了在 post 请求的 headers 上添加“Content-type application/json”的问题。并确保以有效的 json 格式发送 de object,属性必须类似于:
{"email":"mi@email.com"}
根据文档,https://github.com/auth0/node-jsonwebtoken#jwtverifytoken-secretorpublickey-options-callback、jwt.verify
将 returns 解码负载,我 运行 简单脚本:
var token = jwt.sign({email: req.body.email,}, 's3cr3t');
var decoded = jwt.verify(token, 's3cr3t');
console.log(decoded)
但它只输出如下:{ iat: 1470725598 }
我希望输出应该像 {email: myemail@domain.com,}
有什么我遗漏的吗?
验证函数采用第三个参数,function (err, decoded)
。
您的代码应如下所示:
jwt.verify (token, "s3cr3t", function (err, decoded) {
if (err) throw err;
// decoded object with your data
}
在将 属性 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
子句中,如文档中所示。这对于在令牌无效时验证和抛出错误很有用。
我知道这是一个老问题,但没有明确的解决方案来说明如何重现该问题。我最近也遇到了同样的问题:Decoded values where like {iat:xxxz}
这是为什么:
发送没有“Content-type: application/json”的 post 请求将导致 req.body.email 未定义。这不是您尝试 jwt.verify 的值,因此出现意外行为。
解决了在 post 请求的 headers 上添加“Content-type application/json”的问题。并确保以有效的 json 格式发送 de object,属性必须类似于:
{"email":"mi@email.com"}