浏览器后退按钮不会破坏 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'...
我的注销机制的代码是
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'...