如何让node + expressjs应用程序与浏览器后退历史一起工作?

时间:2014-03-23 10:48:37

标签: node.js mongodb express

我有一个简单的登录注销系统,如下所示:

exports.login = function(req, res) {
    var email = req.body.email;
    var password = req.body.password;
    db.users.find({email: email, password: password}, function(err, users) {
        if (users.length === 0) {
            res.render('home', {
                title: siteTitle,
                loginError: 'true',
                errorMsg: 'Wrong login credentials'
            });
        } else {
            req.session.username = email;
            res.redirect('/main');
        }
    });
};

exports.logout = function(req, res) {
    // delete the session variable
    delete req.session.username;
    // redirect user to homepage
    res.redirect('/');
};

以下是绑定:

app.get('/', store.home);
app.post('/', store.home);

app.get('/main', store.main);
app.post('/main', store.main);

app.post('/login', store.login);
app.get('/login', store.login);

app.get('/logout', store.logout);
app.post('/logout', store.logout);

所以我有这些页面:

  1. /(仅在用户未登录时才会转到此处,否则会重定向到/main

  2. /login(立即重定向到/main/

  3. /main(仅在用户登录时才会显示此处,否则会重定向到/)。

  4. 用例:

    1. 转到/

    2. 登录

    3. 您现在被重定向到/main

    4. 点击浏览器后退按钮。

    5. 您现在位于/,就好像您从未登录过一样!为什么?

2 个答案:

答案 0 :(得分:0)

您需要使用会话来确定用户的状态,然后相应地重定向他。

nodejs-and-express-sessions

答案 1 :(得分:0)

这是浏览器在历史记录中缓存页面时的一般问题。

有几种方法可以解决这个问题。它详细介绍了here