gpt4 book ai didi

javascript - 浏览器后退按钮不会破坏 PassportJS + ExpressJS 中的 session 。如何完全终止/终止 session ?

转载 作者:行者123 更新时间:2023-11-30 07:37:30 26 4
gpt4 key购买 nike

我的注销机制的代码是

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

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

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

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

请帮忙。提前致谢。

编辑:这是 session ID

enter image description here

最佳答案

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

这将强制浏览器获取页面的新副本,即使他们点击“后退”也是如此。


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

如果你确定当用户回击时,'/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(...)(不指定任何路由)将为所有请求执行。

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

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

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

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

关于javascript - 浏览器后退按钮不会破坏 PassportJS + ExpressJS 中的 session 。如何完全终止/终止 session ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28346746/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com