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()
前に実行されます。サーバーログで
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();
}
しかし、私は次のような出力を受け取り、::ここでauth
ためのコードがある
Bearer jsflkdjlsdfjksodfkjlsdfjkls
11111
false
22222
33333
これは、クライアント側のトークンがあることを意味し、それはパスですjwt検証。ただし、サーバは認証コールバックで情報を返す前にapp.get()
の実行を開始することを決定します。何がありますか?
は、あなたが)(次を呼び出す前に5秒の待機を追加することができます:あなたはどちらかの結果を持っているだけで後
next()
を呼び出すためにこれを回避する唯一の方法。私はそれがログライティングの問題ではないことを確認したい。 – limbo@limboさて、出力は同じです。これは実際には 'jwt.verify()'を呼び出す前に一時停止するので、ロジックは 'jwt.verify()'の後のコードにすぐに渡されます。 – db2791