您好,我正在创建令牌验证(JWT),出现此错误的是代码 JWT签名令牌:
if (user) {
const payload = user._id
console.log(payload)
console.log(process.env.SECRET)
const token = jwt.sign({id :payload}, process.env.SECRET, {
expiresIn: 10
})
console.log(token)
res.cookie('token', token, {
httpOnly: true
});
并进行验证(在中间件中)
const token = req.body.token ||
req.query.token ||
req.headers['x-access-token'] ||
req.cookies.token;
if (!token) {
res.status(401).send({auth: false})
}
else{
jwt.verify(token, process.env.SECRET, function (err, decoded) {
if (err){
res.status(500).send({
message: err.message
})
}
req.userId = decoded.id
next()
})
}
我不知道问题所在,我认为我已按照文档进行了所有操作,但是如果有人知道解决此问题的方法仍然会出现此错误,我会很高兴,如果我听到它的感谢!
答案 0 :(得分:2)
如果jwt.verify
失败,则您正在尝试访问不存在的decoded.id
。因此,请在return
内发出if(err)
,否则代码将继续,调用next
并尝试访问decoded.id
,从而触发错误。
jwt.verify(token, process.env.SECRET, function(err, decoded) {
if (err) {
return res.status(500).send({
message: err.message
})
}
req.userId = decoded.id
next()
})