浏览器后退按钮不会破坏 PassportJS + ExpressJS 中的会话。如何kill/terminate整个会话?

Browser Back Button doesn't destroy the session in PassportJS + ExpressJS. How to kill/terminate the session entirely?

我的注销机制的代码是

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

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

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

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

请帮忙。提前致谢。

编辑:这是会话 ID

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

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

这将强制浏览器获取页面的新副本,即使他们点击 "back"。


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

如果你确定当用户回击时,'/login'是他们将登陆的路线,那么你可以只在那里定义它,这样就可以省去上面的麻烦。


Where exactly does this code go?

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');
});

Can it be used like this?

没有

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

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

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

这些路线"middlewares"(正如它们的名称)也相继执行。 (您将在上述文档中了解更多信息)

您想将 headers 设置在任何其他路由 之前,以便无论其他路由呈现什么,都使用 header 强制呈现使用户的缓存无效。

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

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