javascript - jwt.verify() 的 Node.js 回调

标签 javascript node.js express jwt

我的 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()。给了什么?

最佳答案

根据 jwt documentation您可以使用两个选项实现 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); }

关于javascript - jwt.verify() 的 Node.js 回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38533409/

相关文章:

javascript - window.onload Javascript,具有接收参数的函数?

node.js - 按小时查找/查询模型

node.js - 将字体添加到 Puppeteer PDF 渲染器

node.js - 在快速应用程序中调用两次 app 变量

node.js - Node js中使用Buffer会导致内存泄漏吗

javascript - 如何从nodeJS中的子文件中获取与父文件夹相同的目录中的文件的绝对路径

javascript - 将 SPAN 插入 DIV

javascript - AngularJS:无法将 localStorage 项保存到作用域变量中

javascript - 行推送到下一个 View react 导航

javascript - nodejs执行字符串变量