jwt.verify() 的 Node.js 回调

新手上路,请多包涵

我的 Node.js 服务器上有一条验证请求的验证路由:

 app.get('/loggedin', auth, function(req, res){
    console.log(req.authenticated);
    res.send(req.authenticated ? req.authenticated: false)
})

据我了解, authapp.get() 之前运行。这是 auth 的代码:

 var jwt = require('jsonwebtoken');
var config = require('./config');

module.exports = function(req,res,next){
    var bearerHeader = req.headers['authorization'];
    var token;
    console.log(bearerHeader);
    req.authenticated = false;
    if (bearerHeader){
        console.log("11111");
        var bearer = bearerHeader.split(" ");
        token = bearer[1];
        jwt.verify(token, config.secret, function (err, decoded){
            console.log("22222");
            if (err){
                console.log(err);
                req.authenticated = false;
                req.decoded = null;
            } else {
                console.log("33333");
                req.decoded = decoded;
                req.authenticated = true;
            }
        });
    }
    next();
}

但是,在服务器日志中,我收到以下输出:

 Bearer jsflkdjlsdfjksodfkjlsdfjkls
11111
false
22222
33333

这意味着客户端有一个token,那就是通过了jwt验证。但是,服务器决定在身份验证回调中完成返回信息之前开始运行 app.get() 。是什么赋予了?

原文由 db2791 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 955
1 个回答

根据 jwt 文档, 您可以使用两个选项实现 jwt.verify() 方法:

异步: 如果提供回调,函数将异步执行。如果签名有效且可选的过期时间、受众或发行者有效,则使用解码后的有效负载调用回调。如果没有,它将被调用并出现错误。

 // async
jwt.verify(token, pass, (err, decoded) => { async callback } );

同步: 如果未提供回调,函数将同步执行。如果签名有效并且可选的过期时间、受众或发行者有效,则返回解码后的有效负载。如果没有,它将抛出错误。

 //sync
try {
 const decoded = jwt.verify(token, pass);
}
catch (ex) { console.log(ex.message); }

原文由 Fabio 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏