`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
答案 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", "");