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

时间:2017-05-11 12:26:00

标签: javascript node.js restify

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

这是我的代码。每当我尝试验证令牌。我想从标头替换Bearer以仅验证令牌。如果是持有者,它总会变成'错误'。当我从标题中删除Bearer时,我会完美的。有人请帮我解决这个问题。有没有办法解决这个问题?

输出:

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

3 个答案:

答案 0 :(得分:8)

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

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

将导致:" 456513" (令牌前有空格)

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

可以解决您的问题,但我建议首先验证身份验证方案(" Bearer" term is really" 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) {
     }
   }
}

答案 1 :(得分:0)

尝试一下

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

答案 2 :(得分:0)

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

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

或者您可以简单地从字符串中切出Bearer

// OPTION 2
bearerHeader.replace("Bearer", "");