JWT-TypeError:无法读取未定义的属性“ id”

时间:2019-03-13 12:23:30

标签: node.js express jwt payload

您好,我正在创建令牌验证(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()
  })

}

我不知道问题所在,我认为我已按照文档进行了所有操作,但是如果有人知道解决此问题的方法仍然会出现此错误,我会很高兴,如果我听到它的感谢!

1 个答案:

答案 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()
})