我的退出机制的代码是
app.get('/logout', isLoggedIn, function(req, res) {
req.logout();
res.redirect('/');
});
使用密钥的Express会话包,无法在任何地方设置Cookie。
在我退出后单击浏览器后退按钮时,它仍然允许用户返回正在进行身份验证的页面。如何完全终止此会话?
isLoggedIn只是通过PassportJS的isAuthenticated方法进行身份验证。这是什么方式?
请帮忙。在此先感谢。
编辑:这是会话ID
答案 0 :(得分:7)
为已注销的用户有条件地将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();
});
这将强制浏览器获取页面的新副本,即使它们点击了#34;返回"。
注意:这是以禁用未登录的 所有 用户的缓存为代价的,为了这个答案,这些用户包括那些刚刚退出。如果您不想完全禁用所有注销用户的缓存,您应该找到区分这两者的方法。会话的东西..
如果您确定当用户点击时,'/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'...