我的 Node.js 服务器上有一条验证请求的验证路由:
app.get('/loggedin', auth, function(req, res){
console.log(req.authenticated);
res.send(req.authenticated ? req.authenticated: false)
})
据我了解, auth
在 app.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 许可协议
根据 jwt 文档, 您可以使用两个选项实现
jwt.verify()
方法:异步: 如果提供回调,函数将异步执行。如果签名有效且可选的过期时间、受众或发行者有效,则使用解码后的有效负载调用回调。如果没有,它将被调用并出现错误。
同步: 如果未提供回调,函数将同步执行。如果签名有效并且可选的过期时间、受众或发行者有效,则返回解码后的有效负载。如果没有,它将抛出错误。