【发布时间】:2019-12-07 00:06:24
【问题描述】:
我正在使用 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() 时出现错误。
非常感谢任何帮助。如果您需要我的代码中的更多信息,请告诉我。
【问题讨论】:
-
好吧,您正在将整个用户记录添加到令牌(够糟糕),并且该记录甚至包含您之前存储到数据库中的令牌(更糟)。我建议只添加一些必要的声明,例如用户 ID 和令牌的到期时间。您可以在jwt.io 上检查您的令牌
-
好的,我去看看 jwt.io。我忘了添加 jwt.decode() 工作得很好,但 jwt.verify() 没有,这对我来说似乎很奇怪。
-
我刚刚使用了jwt.io,它验证了签名。我还更改了上面的令牌以删除用户信息。
-
是的,你是对的;我误认为它正在被验证。我稍后会发布新代码和令牌。我在删除所有用户信息时遇到问题,我不想在 SO 上提供这些信息。顺便说一句,感谢您的帮助。
-
不客气。请。从不发布真实数据,这里只测试数据。您可以将您的帖子标记为“需要主持人干预”并解释问题。我认为他们可以提供帮助。
标签: node.js jwt express-jwt