用户在会话仍处于身份验证状态时单击后退按钮,并重定向到node.js中的登录页面

joh*_*ith 11 javascript authentication node.js passport.js

我有一个简单的Web应用程序,它具有登录屏幕和活动页面,只有在用户提供了有效凭据时才能访问该页面.假设用户使用有效凭据点击登录并重新定向到活动页面.现在用户没有点击退出,而是他/她只需点击浏览器的后退按钮并返回登录页面.这种行为显然是不直观的,我会假设当用户登录并且他/她点击后退按钮以保持在同一页面上而不返回登录页面.

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

这是我目前使用的一种简单方法,总是将用户重定向回活动页面,但是我发现这是一种资源浪费的方法,因为引入了不需要的重定向.我的问题是,这是实现上述行为的标准和最简洁的方法还是有更好的机制?我使用护照进行身份验证和存储jwt令牌.

编辑:重新迭代上述解决方案只有在启用了浏览器no-cache时才有效,相反,由于浏览器缓存了页面,因此甚至没有调用登录路由的控制器.我正在寻找更强大的东西.我认为将浏览器硬编码为不在生产环境中缓存页面是不错的做法.

bra*_*ipt 3

(大多数)现代浏览器的“功能”之一是单击后退按钮会将您导航回该页面加载时的状态。除非您在导航到登录状态之前动态更新登录页面,否则您将获得这种体验。

我建议的是,在登录页面上进行身份验证后,不要立即将用户重定向到登录状态,而是更新登录页面以指示用户现在已登录(例如,如果您有头像/个人资料图标)在右上角,使用 .js 更改其外观以指示用户已登录)。

更改登录视图的状态后,导航到适当的内容视图(使用元重定向可能是最合适的,但您可以按照自己的喜好进行操作)。

您可以假设,因为用户单击了后退按钮,他们可能是有意这样做的。该解决方案确保尊重用户对后退按钮行为的期望,而不是通过使用 js 检测 cookie 并重新导航来强制重定向 - 这会导致前向/后向重定向循环(这非常令人沮丧!)

虽然 StackOverflow 实际上并没有做您想要做的事情,但这里有一个示例,说明您可以/login在离开之前使用 .js 进行动态更新:

在此输入图像描述 在此输入图像描述