【问题标题】:Jsonwebtoken verify always return only {iat: xxx }Jsonwebtoken 验证总是只返回 {iat: xxx }
【发布时间】:2016-12-15 02:38:27
【问题描述】:

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

我有什么遗漏吗?

【问题讨论】:

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


    【解决方案1】:

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

    jwt.verify (token, "s3cr3t", function (err, decoded) {
        if (err) throw err;
    
        // decoded object with your data
    }
    

    【讨论】:

    • 什么 OP 有一个有效的例子。如果没有指定回调函数,则jwt.verify 同步运行。
    • 我明白了。然后,我没有看到初始代码有问题。他不妨试试这个代码并报告它是否解决了问题。
    • 谢谢@NikxDa,但不行:(
    【解决方案2】:

    在将属性 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”,那么输出将是;

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

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

    【讨论】:

    • 提醒 email 必须是字符串,我也遇到了同样的问题,因为我的键值是 int 而不是字符串(我刚刚将 { key: value } 替换为 { key: `${value}` }。跨度>
    猜你喜欢
    • 2017-03-29
    • 1970-01-01
    • 1970-01-01
    • 2022-11-09
    • 2015-01-05
    • 2022-01-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多