bom*_*ant 1 javascript node.js express passport-local passport.js
我的登出机制的代码是
app.get('/logout', isLoggedIn, function(req, res) {
req.logout();
res.redirect('/');
});
Run Code Online (Sandbox Code Playgroud)
使用密钥的Express会话包,没有在任何地方设置Cookies.
当我在注销后单击浏览器后退按钮时,它仍允许用户返回正在进行身份验证的页面.如何完全终止此会话?
isLoggedIn只是通过PassportJS的isAuthenticated方法进行身份验证.这是什么方式?
请帮忙.提前致谢.
编辑:这是会话ID

为已注销的用户有条件地设置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();
});
Run Code Online (Sandbox Code Playgroud)
这将强制浏览器获取页面的新副本,即使它们"返回".
注意:这是以禁用未登录的所有用户的缓存为代价的,为了这个答案,包括刚刚注销的用户.如果您不想为所有已注销的用户完全禁用缓存,您应该可以找到区分这两者的方法.会议的东西..
如果您确定当用户回击时,'/login'是他们将要着陆的路线,那么您只能在那里定义它,从而避免了执行上述操作的麻烦.
这段代码到底在哪里?
Run Code Online (Sandbox Code Playgroud)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'...
Run Code Online (Sandbox Code Playgroud)