注意:以下代码使用名为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
ANSWER
答案是双重的。首先是下面接受的答案。
将会话存储在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("/");
})
})
答案 0 :(得分:1)
这不是会话的问题,而是您的数据库查询。
而不是
User.findOne(req.session.user.email, function(err, user) {
应该是
User.findOne({email: req.session.user.email}, function(err, user) {
否则,查询始终返回users集合中的第一个文档。