2015-12-22 104 views
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("/"); 
    }) 
}) 

回答

1

這不是會話問題,而是您的數據庫查詢。

而不是

User.findOne(req.session.user.email, function(err, user) { 

應該

User.findOne({email: req.session.user.email}, function(err, user) { 

否則,查詢總是返回從用戶收集的第一份文件。

+0

當我使用你的代碼時,所有我從console.log(用戶)返回的是空 – William

+0

確保'req.session.user.email'然後存在。例如。把'console.log(req.session.user.email)'db查詢上面的一行來檢查。實際上,將整個貓鼬文檔存儲到會話中並不是一個好主意,因爲它將被'client-sessions'編碼爲一個cookie字符串。 –

+0

它沒有被創建,但我不知道爲什麼。太令人沮喪了。我試圖只存儲電子郵件,而不是整個文件,它也沒有工作。 – William