【发布时间】:2015-12-22 14:20:11
【问题描述】:
注意:下面的代码使用了一个名为client-sessions by Mozilla的模块
我有一个注册用户的表格,在提交表格时,一个 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
回答
这个问题的答案有两个。首先是下面接受的答案。
此外,将会话存储在 save 方法中也没有任何意义。更正下面的代码
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("/");
})
})
【问题讨论】:
标签: javascript node.js forms session mongoose