无法使用express会话将用户信息传递到不同的路由?



所以我的登录帖子路由验证用户并从数据库中获取用户信息。我想把它发送到重定向路线。我正在使用会话,但是教程和之前关于如何做到这一点的问题要么不起作用,要么被弃用。

这就是我正在做的获取我保存在请求中的用户信息。

req.session = Users

然后我输入这个来验证我得到了用户信息

console.log(req.session)

它工作,我看到所有的信息在服务器终端。

然而,当我试图在重定向路由中传递信息时,我无法检索会话。

这是路由器端代码

router.post('/Login', async (req,res)=> {

try {

const Users = await User.findOne({ email:req.body.email}).exec()
const auth = await bcrypt.compare(req.body.password, Users.password)
if (auth){

req.session = Users;
res.redirect('./profile' )  
}  

else { res.send('invalid credentials')}

}
catch (err) { 

console.log('error',err)
res.status(500).send('invalid credentials')
}
})
// Profile page
router.get(('/profile'), (req, res)=>
res.render('Projects/file.ejs', {info:req.session}
))

file.ejs

<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<h3>User info</h3>
<p><%= info %></p>
</body>
</html>

错误消息

error TypeError: req.session.touch is not a function
at ServerResponse.end (C:UsersMoeDesktopLogin Practicenode_modulesexpress-sessionindex.js:330:21)
at ServerResponse.redirect (C:UsersMoeDesktopLogin Practicenode_modulesexpresslibresponse.js:951:10)
at C:UsersMoeDesktopLogin Practiceroutesapiprojects.js:46:6

第46行

res.redirect('/profile)

有人知道如何解决这个问题吗?

您正在用req.session = Users覆盖请求对象上的整个会话属性。相反,使用req.session.user = Users

使用user.findOne时,将Users重命名为userfindOne返回单个对象。

相关内容

  • 没有找到相关文章

最新更新