Node.js JWT TypeError:无法读取属性';id';未定义的

Node.js JWT TypeError:无法读取属性';id';未定义的,node.js,express,jwt,payload,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

您好,我正在创建令牌验证(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
        });
并验证它(在中间件中)


我不知道问题出在哪里,我想我是按照文档做的,但是这个错误仍然会出现,如果有人知道这个问题的解决方法,我会很高兴听到的谢谢

如果
jwt.verify
失败,则您正在尝试访问不存在的
decoded.id
。因此,在
if(err)
内部发出
return
,否则代码将继续,调用
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()
})

如果
jwt.verify
失败,则您正在尝试访问不存在的
decoded.id
。因此,在
if(err)
内部发出
return
,否则代码将继续,调用
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()
})

但由于我在主页上创建验证,我应该如何确定用户是否经过身份验证?使用cookies。我认为这是您构建的一个身份验证中间件。将其用作每个需要验证的路由的中间件。我正在这样做,但此中间件用于默认路由,我想确定用户是否经过验证(例如)在主页面上显示其配置文件pic,然后再将中间件用于“/profile”路由,并在没有令牌的情况下将用户重定向到主页面(或届会)但是,如果存在令牌,当主页也是个人资料页时,我该怎么做呢?你可以在任何地方使用中间件,在主页或个人资料页中。我不确定我是否遵循了你想要实现的目标。因此,如果我们以脸书为例,脸书有主页,你可以在主页“facebook.com/”上进行身份验证,如果你是身份验证者ed Facebook代码仍在默认路径“Facebook.com/”上显示您的时间线。我正在做相同的事情,但主页包含其他内容,如果用户未通过身份验证,主页与往常一样,但如果用户已通过身份验证,例如在主页上添加了个人资料图片和其他功能。当我发送{auth:false}若令牌不存在,我认为这是一种不好的做法,因为攻击者可以在客户端更改令牌,所以我希望最佳做法能够确定,但由于我正在主页上创建验证,我应该如何确定用户是否经过身份验证?通过使用cookie。我认为这是您构建的身份验证中间件。将其用作ev的中间件ery route您需要经过身份验证。我正在这样做,但此中间件用于默认路由,我想确定用户是否经过身份验证(例如)在主页面上显示其配置文件图片,然后再使用中间件进行“/profile”路由,并在没有令牌(或会话)的情况下将用户重定向到主页面但是,如果存在令牌,当主页也是个人资料页时,我该怎么做呢?你可以在任何地方使用中间件,在主页或个人资料页中。我不确定我是否遵循了你想要实现的目标。因此,如果我们以脸书为例,脸书有主页,你可以在主页“facebook.com/”上进行身份验证,如果你是身份验证者ed Facebook代码仍在默认路径“Facebook.com/”上显示您的时间线。我正在做相同的事情,但主页包含其他内容,如果用户未通过身份验证,主页与往常一样,但如果用户已通过身份验证,例如在主页上添加了个人资料图片和其他功能。当我发送{auth:false}若令牌不存在,我认为这是一种不好的做法,因为攻击者可以在客户端更改它,所以我希望通过最佳实践来确定