javascript - 当用户从他们打开的另一个选项卡中注销时,如何将用户发送到登录页面?
问题描述
我在 Nodejs 中使用 cookie-session 和 passport.js 来处理用户身份验证:
app.use(require("cookie-session")({
secret:keys.session.secret,
resave:false,
saveUninitialized:false
}));
在我的前端,我有 javascript 来跟踪键盘和鼠标事件是否处于不活动状态,并在 20 分钟不活动后将用户注销:
var idleTime = 0;
//Increment the idle time counter every minute.
var idleInterval = setInterval(timerIncrement, 60000); // 1 minute
//Zero the idle timer on mouse movement.
$(this).mousemove(function (e) {
idleTime = 0;
});
$(this).keypress(function (e) {
idleTime = 0;
});
function timerIncrement() {
idleTime = idleTime + 1;
if (idleTime > 19) { // 20 minutes
window.location.href = '../logout'
// window.location.href = '../login'
}
}
我遇到的问题是当用户打开网站的多个选项卡并忘记打开的其他选项卡时。选项卡之一将注销用户。直到他/她尝试转到他们正在使用的选项卡中的某个页面时,用户才会意识到这一点。进入页面意味着他们必须通过我的isLoggedIn
中间件,如果他们没有登录,该中间件会自动将他们发送到登录页面。
问题是我的网站上有一个巨大的表单,只发送发布请求。一个用户可能在它上面工作了几分钟才意识到什么都没有被保存。
不活动应该如何处理?我是否也应该检查后端是否处于不活动状态?它应该只是后端吗?
解决方案
BroadcastChannel
如果支持,您可以在选项卡之间进行通信,否则使用storage
来自localStorage
. 您可以在此处找到详细信息,以及可以为您处理所有详细信息的小型库。
我建议显示一条消息,警告用户他将在 X 秒内因不活动而注销,并带有一个推迟注销的按钮。
推荐阅读
- dictionary - 初始化和递增嵌套的dict python
- kubernetes - k3s 是否支持 ServiceTopology 功能?
- python - 使用 XML 声明从网页中抓取链接
- javascript - 为什么此表单验证似乎绕过了 `event.preventDefault();`?
- python - 计算特定年份错误中的特定工作日数
- sql-server - 有没有办法只使用 SSMS 来查看在给定时间段内有多少数据被插入到数据库中?
- python - 如何修复 RuntimeError:在 pytorch 中从 jit 创建检查点时,内建函数不能用作值(带有 dict)?
- php - PHP - 删除空菜单
- google-cloud-platform - 权限被拒绝(公钥、gssapi-keyex、gssapi-with-mic)。GCP
- mysql - 在nodejs mysql中向多行添加多个值