用户点击后退button,而会话仍然被authentication,并被redirect到node.js中的login页面

我有一个简单的Web应用程序,它有一个login屏幕和一个活动页面,只有当用户提供有效的凭据时才可以访问。 假设用户点击有效凭证login,并被redirect到活动页面。现在,用户不会点击注销,而只需点击浏览器的后退button并返回到login页面。 这种行为显然是非直观的,我假设用户login时,他/她点击后退button,保持在同一页面,而不是回到login页面。

function loginUser(req, res) { if (req.session.auth) // if user is still authenticated { res.redirect('/activity'); } res.render('login'); } 

这是我目前使用的一种简单的方法,总是将用户redirect到活动页面,但是我觉得这是一个资源浪费的方法,因为存在不必要的redirect。 我的问题是,这是执行上述行为的标准和最干净的方式还是有更好的机制? 我正在使用护照进行身份validation并存储jwt令牌。

编辑:重新迭代上面的解决scheme工作只有浏览器没有caching启用,相反,login路由控制器甚至没有被调用,因为浏览器已caching页面。 我正在寻找更强大的东西。 我认为将浏览器硬编码为不在生产环境中caching页面是一种好的做法。

(大多数)现代浏览器的“function”之一是,点击后退button可导航回到加载页面的状态。 除非导航到login状态之前dynamic更新login页面否则这是您将获得的体验。

我build议,而不是立即redirect到login状态,更新login页面,以表明用户现在login(例如,如果你有一个化身/个人资料图标在右上angular,用.js改变它的外观以指示用户login)。

一旦login视图的状态已经改变,然后导航到适当的内容视图(使用元redirect可能是最合适的,但你可以做你喜欢的)。

你可以假设,因为用户点击后退button,他们可能意味着。 这个解决scheme可以确保用户对后退button行为的期望得到尊重,而不是通过用js检测一个cookie并重新导航来强制redirect – 这会导致前向/后向redirect循环(这是令人沮丧的!)

虽然StackOverflow实际上并没有做你正在做的事情,但下面是一个例子,你可以用.js做些什么来dynamic更新/login然后再离开:

在这里输入图像描述 在这里输入图像描述

你的解决scheme似乎很好 您可以通过使用window.onbeforeunload和window.onunload事件来改进您的想法。 像这样的东西:

 <script type="text/javascript"> window.onbeforeunload = onbeforeunload_handler; window.onunload = onunload_handler; function onbeforeunload_handler() { // Do something here } function onunload_handler() { // Or do something here } </script> 

我没有testing这个,但我认为它应该工作。 试试js res.redirect('/activity?_='+ Date.now()); 阻止浏览器使用caching页面。

你在这里有几个解决scheme。

一,将告诉浏览器不要caching/login。 这很有道理,原因很多。 关于您不希望在生产中禁用caching的问题,请记住,您只会为/ login页面禁用caching,而不是那么糟糕。

另一种方法是在/ login页面中添加一些JS代码,以查看是否存在某个已login的cookie。 如果是这样,只需刷新页面。 通过刷新页面,后端将被执行,redirect将实际发生。

我会去的第一个。 对于这个特定的路线,沿着这些线路的东西会做的伎俩(未testing)。

 res.set({ 'Cache-Control': 'no-cache, no-store, must-revalidate', 'Pragma' : 'no-cache', 'Expires' : '0', })