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