node.js - 使用express-jwt,为什么我的授权 header 明明就在那里却不见了

标签 node.js authentication token express-jwt

我正在使用express-jwt和jsonwebtoken。

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

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

我可以看到 req.headers.authorization token 存在,因为我正在将其注销。所以我不明白为什么标题明明就在那里却不见了。

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

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

Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJfaWQiOiI1NDhhMGFkODcwZWZjZmMwM2EwMDAwMDEiLCJjcmVhdGVkQXQiOiIyMDE0LTEyLTExVDIxOjIxOjI4LjI0M1oiLCJmaXJzdE5hbWUiOiIiLCJsYXN0TmFtZSI6IiIsInVzZXJuYW1lIjoicnlhbm9yZSIsInBhc3N3b3JkIjoiJDJhJDEwJFM0YjcyVzIyQS9ubDJxZXV0WUxsUk9SNWhIblhvTGxkT09ud096OTFVNzBvSDVIQXRGZFhTIiwiZW1haWwiOiIiLCJfX3YiOjB9.fiHZ1J7cLXtgurTvqGVP2RcJqpju1zNmXBETWqYKXko

最佳答案

我不得不不接受@rdegges 的回答,因为我有点操之过急。发现调试器非常有帮助,但对解决我的问题没有什么实际帮助。

答案其实很简单。当我需要拆分“Bearer”部分时,我发送了整个授权 header 。我的想法来自This blog 。删除“Bearer”部分后,验证正常。

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

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/

相关文章:

javascript - 使用nodejs运行两个任务异步?

node.js - 安装nodejs时apt-get命令错误

node.js - fromAuthHeaderAsBearerToken 在 NODE 中不起作用

android - token 认证 Android Studio

string - 如何在日志文件中查找子字符串并使用 dos 批处理文件增加计数器

java - 在 Java StreamTokenizer 文档中, "ordinary"是什么意思?

javascript - Facebook Messenger 聊天机器人显示 "Check your connection and try again."

node.js - 加载资源失败:net::ERR_CERT_AUTHORITY_INVALID

android - Facebook 登录对话框在加载后很快消失

php - 指示浏览器仅在成功登录时提示保存用户名/密码?