我正在将express-jwt与jsonwebtoken一起使用。

当我尝试使用jsonwebtoken.verify()时,出现以下错误:

Error: Invalid token: no header in signature 'Bearer eyJ0eXAiOi...reallylongtoken...
... more ...
code: 'MISSING_HEADER'


我可以看到req.headers.authorization令牌存在,因为我正在注销它。因此,我不明白为什么标头很明显会丢失标头。

任何帮助表示赞赏。
要点是:
https://gist.github.com/ryanore/914362881d2d9f0878f2

这是req.headers.authorization的console.log输出

Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJfaWQiOiI1NDhhMGFkODcwZWZjZmMwM2EwMDAwMDEiLCJjcmVhdGVkQXQiOiIyMDE0LTEyLTExVDIxOjIxOjI4LjI0M1oiLCJmaXJzdE5hbWUiOiIiLCJsYXN0TmFtZSI6IiIsInVzZXJuYW1lIjoicnlhbm9yZSIsInBhc3N3b3JkIjoiJDJhJDEwJFM0YjcyVzIyQS9ubDJxZXV0WUxsUk9SNWhIblhvTGxkT09ud096OTFVNzBvSDVIQXRGZFhTIiwiZW1haWwiOiIiLCJfX3YiOjB9.fiHZ1J7cLXtgurTvqGVP2RcJqpju1zNmXBETWqYKXko

最佳答案

我不得不接受@rdegges的答案,因为我跳了一点枪。发现调试器非常有帮助,但是对解决我的问题几乎没有实际帮助。

答案实际上很简单。当我需要拆分其中的“承载”部分时,我正在发送整个Authorization标头。我的想法来自This blog。删除“轴承”部分后,它验证正常。

如果对其他人有帮助,这是更新的功能。

exports.verify = function(req, res) {
  var token = null;
  var bits = req.headers.authorization.split(' ');

  if (bits.length == 2) {
        var scheme = bits[0];
        var credentials = bits[1];
        if (/^Bearer$/i.test(scheme)) {
            token = credentials;
            jwt.verify(token, config.secret, function(err, decoded){
                if(err)     sendStatus(res, 401);
            });
        }
    }
    else{
        sendStatus(res, 401);
    }
};

关于node.js - 使用express-jwt时,为什么我的授权 header 显然不存在,为什么会丢失,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27448723/

10-16 07:06