我尝试从标头替换Bearer以验证令牌

Nai*_*val 6 javascript node.js restify

  `bearer = bearerHeader.replace("Bearer","");
                    jwt.verify(bearer, 'super_secret', function (err, decoded) {
                            console.log(err);
                            console.log(decoded);`
Run Code Online (Sandbox Code Playgroud)

这是我的代码。每当我尝试验证令牌时。我想替换标头中的Bearer以仅验证令牌。如果持有持票人,它将始终变为“错误”。当我从标题删除承载时,我会完美地工作。任何人请帮我解决这个问题。有什么办法解决这个问题?

输出:

    { [JsonWebTokenError: invalid token] name: 'JsonWebTokenError', message: 'invalid token' }
undefined
Run Code Online (Sandbox Code Playgroud)

Fet*_*rij 14

如果bearerHeader类似于“ Bearer 456513”,则您的代码

bearerHeader.replace("Bearer","");
Run Code Online (Sandbox Code Playgroud)

结果为:“ 456513”(令牌前有空格)

bearerHeader.replace('Bearer ',''); 
Run Code Online (Sandbox Code Playgroud)

可能会解决您的问题,但我建议您首先验证身份验证方案(“ 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) {
     }
   }
}
Run Code Online (Sandbox Code Playgroud)


小智 5

尝试这个

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