我有一个简单的 Web 应用程序,它有一个登录屏幕和一个事件页面,只有在用户提供有效凭据时才能访问。假设用户使用有效凭据单击登录并被重定向到事件页面。现在用户没有单击注销,而是他/她只需单击浏览器的后退按钮并返回登录页面。这种行为显然是不直观的,我会假设当用户登录并且他/她单击后退按钮以保持在同一页面上而不返回登录页面时。
function loginUser(req, res) {
if (req.session.auth) // if user is still authenticated
{
res.redirect('/activity');
}
res.render('login');
}
这是我目前用来始终将用户重定向回事件页面的简单方法,但是我发现这是一种资源浪费方法,因为引入了不需要的重定向。我的问题是,这是实现上述行为的标准和最干净的方式还是有更好的机制?我正在使用 Passport 进行身份验证和存储 jwt token 。
编辑:要重新迭代上述解决方案仅在启用浏览器无缓存时才有效,与此相反,登录路由的 Controller 甚至不会被调用,因为浏览器已经缓存了页面。我正在寻找更强大的东西。我认为在生产环境中对浏览器进行硬编码以不缓存页面并不是一个好习惯。
最佳答案
(大多数)现代浏览器的“功能”之一是单击后退按钮可将您导航回加载该页面的状态。除非您在导航到已登录状态之前动态更新登录页面,否则这就是您将获得的体验。
我的建议是在登录页面上通过身份验证,而不是立即将用户重定向到登录状态,而是更新登录页面以指示用户现在已登录(例如,如果您有头像/profile 图标在右上角,用 .js 更改它的外观以表明用户已登录)。
登录 View 的状态更改后,导航到适当的内容 View (使用元重定向可能是最合适的,但您可以按照自己的喜好进行操作)。
您可以假设因为用户点击了后退按钮,他们可能是故意的。此解决方案确保尊重用户对后退按钮行为的期望,而不是通过检测带有 js 的 cookie 并重新导航来强制重定向——这会导致前/后重定向循环(这太令人沮丧了!)
虽然 StackOverflow 实际上并没有做您想做的事情,但这里有一个示例,说明您可以使用 .js 在您离开之前动态更新 /login
:
关于javascript - 用户在 session 仍然经过身份验证时单击后退按钮并被重定向到 node.js 中的登录页面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38810236/