【问题标题】:Browser Back Button doesn't destroy the session in PassportJS + ExpressJS. How to kill/terminate the session entirely?浏览器后退按钮不会破坏 PassportJS + ExpressJS 中的会话。如何完全终止/终止会话?
【发布时间】:2015-02-05 14:39:47
【问题描述】:

我的注销机制的代码是

app.get('/logout', isLoggedIn, function(req, res) {
        req.logout();
        res.redirect('/');
    });

我正在使用使用密钥的 Express-session 包,没有在任何地方设置 Cookie。

虽然我在注销后单击浏览器的返回按钮,但它仍然允许用户返回到正在验证的页面。如何完全终止此会话?

isLoggedIn 只是通过 PassportJS 的 isAuthenticated 方法进行身份验证。这里的出路是什么?

请帮忙。提前致谢。

编辑:这是会话 ID

【问题讨论】:

  • 它很可能会显示浏览器缓存中的内容,这意味着它不会访问网络,因此您无能为力。

标签: javascript node.js express passport.js passport-local


【解决方案1】:

对于已注销的用户,有条件地Cache-control 标头设置为no-cache

app.use(function(req, res, next) {
    if (!req.user)
        res.header('Cache-Control', 'private, no-cache, no-store, must-revalidate');
    next();
});

这将强制浏览器获取页面的新副本,即使他们点击“返回”。


注意:这是以为未登录的所有用户禁用缓存为代价的,为了回答这个问题,包括刚刚登录的用户出去。如果您不想为 所有 已注销的用户完全禁用缓存,您可能应该找到一种方法来区分这两者。有会话的东西..

如果您确定当用户回击时,'/login' 是他们将登陆的路线,那么您可以仅在此处定义它,从而避免执行上述操作的麻烦。


这段代码到底去哪儿了?

app.get('/logout', isLoggedIn, function(req, res) {
    req.logOut();
    if (!req.user) 
        res.header('Cache-Control', 'private, no-cache, no-store, must-revalidate');
    res.redirect('/login');
});

可以这样用吗?

没有。

app.get(或app.use)定义您的路线。文档:http://expressjs.com/api.html#request

app.get('/logout'...在客户端请求路由 '/logout' 时执行。

app.use(...)(不指定任何路由)将对所有请求执行。

这些路由“中间件”(它们被称为)也被一个接一个地执行。 (您将在上述文档中了解更多信息)

您希望在任何其他路由之前设置标头,这样无论其他路由呈现什么,都会使用强制使用户缓存无效的标头呈现。

// > HERE <
// before all the other routes

app.get('/logout'...
app.get('/login'...
app.get('/'...
app.get('/stuff'...

【讨论】:

  • 谢谢.. 这可能是一个很重要的问题,但是这段代码到底去哪里了? code app.get('/logout', isLoggedIn, function(req, res) { req.logOut(); if (!req.user) res.header('Cache-Control', 'private, no-cache, no-store, must-revalidate'); res.redirect('/login'); }); 可以这样用吗?
  • @laggingreflex user 中的用户在 if (!req.user) 中是什么?是我们定义的还是来自req 的东西。
  • @laggingreflex 哦好吧..谢谢。
猜你喜欢
  • 2012-05-16
  • 2015-04-23
  • 2012-02-24
  • 2012-07-19
  • 1970-01-01
  • 2020-11-12
  • 1970-01-01
  • 2013-08-29
  • 1970-01-01
相关资源
最近更新 更多