我正在使用jsonwebtoken软件包(https://github.com/auth0/node-jsonwebtoken)处理我项目中的JWT。无论我尝试什么,都会出现此错误:name: 'JsonWebTokenError', message: 'invalid signature'
这是我在JWT上签名的地方:
const addBearerToken = (myUser, cb) => {
jwt.sign({user: myUser, userId: myUser.id}, 'helloworld', (err, token) => {
if (err) return (err, null)
userRepo.update(myUser._id, {authToken: token}, (err, myUser) => {
if (err) {
return cb(err, null)
} else {
return cb(null, token)
}
})
})
}
这是我尝试验证的地方:
const checkForJWT = (req, res, next) => {
let bearerHeader = req.header('Authorization').split(' ')
let token = bearerHeader[1]
console.log(token + ' || token')
jwt.verify(token, 'helloworld', (err, decoded) => {
if (err) {
console.log(err)
return (err, null) // this is where the error is thrown
} else {
...
}
})
}
我正在使用“ helloworld”作为我的秘密密钥的备用证。我怀疑问题出在秘密密钥上,但是就像我说的那样,我不确定导致此错误的幕后情况。
如果我使用jwt.decode(token,'helloworld'),我将获得所有正确的信息。但是当我使用jwt.verify()时出现错误。
非常感谢您的帮助。如果您需要我的代码中的更多信息,请告诉我。
答案 0 :(得分:1)
尝试使用 base64 文本作为键。我也面临这个问题,但使用 base64 密钥解决了我的问题。
答案 1 :(得分:-3)
我也有同样的问题,我通过使用toString方法转换令牌来解决了。
await jwt.verify(token.split(" ")[1].toString(),'secret');