首页 > 解决方案 > 当用户从他们打开的另一个选项卡中注销时,如何将用户发送到登录页面?

问题描述

我在 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中间件,如果他们没有登录,该中间件会自动将他们发送到登录页面。

问题是我的网站上有一个巨大的表单,只发送发布请求。一个用户可能在它上面工作了几分钟才意识到什么都没有被保存。

不活动应该如何处理?我是否也应该检查后端是否处于不活动状态?它应该只是后端吗?

标签: javascriptnode.js

解决方案


BroadcastChannel如果支持,您可以在选项卡之间进行通信,否则使用storage来自localStorage. 您可以在此处找到详细信息,以及可以为您处理所有详细信息的小型库。

我建议显示一条消息,警告用户他将在 X 秒内因不活动而注销,并带有一个推迟注销的按钮。


推荐阅读