我需要从 header 中替换 Bearer 以验证令牌

I need to replace Bearer from the header to verify the Token

bearer = bearerHeader.replace("Bearer","");
jwt.verify(bearer, 'super_secret', function (err, decoded) {
    console.log(err);
    console.log(decoded);
});

这是我的代码。每当我尝试验证令牌时。我想从 header 替换 Bearer 以仅验证令牌。如果采取 Bearer,它将始终转到 'err'。当我从 header 中删除 Bearer 时,我会完美地工作。任何人都请帮我解决这个问题。有什么办法可以解决这个问题吗?

输出:

  { 
     [JsonWebTokenError: invalid token] name: 'JsonWebTokenError',
     message: 'invalid token'
  }

   undefined

如果 bearerHeader 类似于 "Bearer 456513" 那么您的代码

bearerHeader.replace("Bearer","");

会得到:“456513”(令牌前有space)

bearerHeader.replace('Bearer ',''); 

可能会解决您的问题,但我建议先验证身份验证方案("Bearer" 术语确实是 "Bearer"):

 var parts = bearerHeader.split(' ');
 if (parts.length === 2) {
   var scheme = parts[0];
   var credentials = parts[1];

   if (/^Bearer$/i.test(scheme)) {
     token = credentials;
     //verify token
     jwt.verify(token, 'super secret', function(err, decoded) {
     }
   }
}

试试这个

bearer = bearerHeader.replace(/^Bearer\s/, '');
    jwt.verify(bearer, 'super_secret', function (err, decoded) {
                        console.log(err);
                        console.log(decoded);`
    }

您可以尝试 split() 空格上的字符串并丢弃第一个元素

// OPTION 1
bearerHeader.split(" ")[1];

或者您可以从字符串

中简单地剪切 Bearer
// OPTION 2
bearerHeader.replace("Bearer", "");

你应该在 Bearer

之后通过 space
var token = req.headers.authorization.replace('Bearer ', '');