0
注:下面的代码使用了一个名为模块client-sessions by Mozilla如何保存与猫鼬文档时设置会话cookie
我有一个表格注册用户,并在表单提交一个POST发送到app.post("/register)
(以下面的代码)。如果我然后转到/
的主页路由,我可以看到输出用户信息的console.log(user)
。
这就是我想要的。
然而,
当我注册为新用户我预计会被重置,当我去到主页的路由第二次我希望看到新的用户信息输出到控制台 - 但我不知道。相反,我看到了第一个用户信息。我想知道为什么会话没有被重置,并被新的用户信息和/或我不理解的地方取代。
谢谢。
app.use(session({
cookieName: 'session',
secret: "whatever",
duration: 30 * 60 * 1000,
activeDuration: 5 * 60 * 1000,
}))
app.get("/", function(req, res) {
if (req.session.user === undefined) {
res.render("index");
} else {
User.findOne(req.session.user.email, function(err, user) {
console.log(user); //__________________This ALWAYS outputs the first user registered even if new users register
})
res.render("index");
}
})
app.get("/register", function(req, res) {
res.render("register");
})
//_______________________________________________BEGIN registration
app.post("/register", function(req, res) {
req.session.reset();
var user = new User({
firstName: req.body.firstName,
lastName: req.body.lastName,
email: req.body.email,
password: req.body.email,
subscribed: false
}).save(function(err) {
req.session.user = user;
res.redirect("/");
})
})
//_______________________________________________END registration
ANSWER
这个问题的答案是双重的。首先在下面接受的答案。
此外,将会话存储在保存方法中也没有意义。下面的已更正的代码
app.post("/register", function(req, res) {
var user = new User({
firstName: req.body.firstName,
lastName: req.body.lastName,
email: req.body.email,
password: req.body.password,
subscribed: false
})
req.session.user = user; // This needed to be outside the save method
user.save(function(err) {
res.redirect("/");
})
})
当我使用你的代码时,所有我从console.log(用户)返回的是空 – William
确保'req.session.user.email'然后存在。例如。把'console.log(req.session.user.email)'db查询上面的一行来检查。实际上,将整个猫鼬文档存储到会话中并不是一个好主意,因为它将被'client-sessions'编码为一个cookie字符串。 –
它没有被创建,但我不知道为什么。太令人沮丧了。我试图只存储电子邮件,而不是整个文件,它也没有工作。 – William