0
我有我的Node.js服务器上的认证路由认证请求: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
这意味着是在客户的身边一个道理,那就是通行证jwt验证。但是,服务器在完成身份验证回调中的信息返回之前,决定开始运行app.get()
。是什么赋予了?
你能调用next()进行身份验证时前加5秒的等待。我想确定它不是日志写入问题。 – limbo
@limbo刚才那样做,输出是一样的。它在调用'jwt.verify()'之前实际上暂停了,所以逻辑在'jwt.verify()'后立即传递到代码中。 – db2791