Node.js JWT TypeError:无法读取属性';id';未定义的
您好,我正在创建令牌验证(JWT),这里出现的错误是代码 JWT签名令牌的名称: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
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}若令牌不存在,我认为这是一种不好的做法,因为攻击者可以在客户端更改它,所以我希望通过最佳实践来确定