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