首页 > 其他分享 >用户长时间无操作返回登录页

用户长时间无操作返回登录页

时间:2024-08-01 10:53:50浏览次数:9  
标签:const 登录 resetTimer 用户 timer events 长时间 router event

main.ts

1.定义定时器

const timeout = 3000;
let timer: any;

const resetTimer = () => {
  if (timer) clearTimeout(timer);
  timer = setTimeout(() => {
    showLogoutWarning();
  }, timeout);
};

2.监听事件,触发定时器

const events = [
  "load", // 资源加载完成
  "mousemove", // 移动鼠标
  "mousedown", // 按下鼠标
  "click", // 点击鼠标
  "scroll", // 页面滚动
  "keypress", // 键盘按下
];

// 导航守卫
router.beforeEach((to, _, next) => {
  if (to.path !== "/login") {
    resetTimer(); // 仅在非登录页时启动计时器
    events.forEach((event) => window.addEventListener(event, resetTimer));
  } else {
    clearTimeout(timer); // 登录页不启动计时器
    events.forEach((event) => window.removeEventListener(event, resetTimer));
  }
  next();
});

3.提示信息

const showLogoutWarning = () => {
  ElNotification({
    title: "提示",
    message: "您已超过3秒钟无操作,将被强制登出",
    type: "warning",
    duration: 1000, // 1秒
    onClose: () => {
      logoutUser();
    },
  });
};

4.返回登录页

const logoutUser = () => {
  // 清除用户状态,例如本地存储的token
  localStorage.removeItem("userToken");
  // 其他登出逻辑
  router.push("/login"); // 重定向到登录页面
};

5.完成

完整代码

import { createApp } from "vue";
import App from "./App.vue";
import ElementPlus, { ElNotification } from "element-plus";
import "element-plus/dist/index.css";
import router from "./router";

const app = createApp(App);
const timeout = 3000;
let timer: any;

const resetTimer = () => {
  if (timer) clearTimeout(timer);
  timer = setTimeout(() => {
    showLogoutWarning();
  }, timeout);
};

const events = [
  "load", // 资源加载完成
  "mousemove", // 移动鼠标
  "mousedown", // 按下鼠标
  "click", // 点击鼠标
  "scroll", // 页面滚动
  "keypress", // 键盘按下
];

const showLogoutWarning = () => {
  ElNotification({
    title: "提示",
    message: "您已超过3秒钟无操作,将被强制登出",
    type: "warning",
    duration: 1000, // 1秒
    onClose: () => {
      logoutUser();
    },
  });
};

const logoutUser = () => {
  // 清除用户状态,例如本地存储的token
  localStorage.removeItem("userToken");
  // 其他登出逻辑
  router.push("/login"); // 重定向到登录页面
};

// 导航守卫
router.beforeEach((to, _, next) => {
  if (to.path !== "/login") {
    resetTimer(); // 仅在非登录页时启动计时器
    events.forEach((event) => window.addEventListener(event, resetTimer));
  } else {
    clearTimeout(timer); // 登录页不启动计时器
    events.forEach((event) => window.removeEventListener(event, resetTimer));
  }
  next();
});

app.use(ElementPlus);
app.use(router);
app.mount("#app");

 

标签:const,登录,resetTimer,用户,timer,events,长时间,router,event
From: https://blog.csdn.net/weixin_73098736/article/details/140841112

相关文章

  • NVIDIA GPU MIG多实例&Multi-Instance GPU-中文用户指南
    目录第一章、介绍第二章、支持的GPU卡第三章、支持的配置 第四章、虚拟化 第五章、概念 5.1术语5.2 分区(Partitioning) 5.3 CUDA并发机制第六章、部署考虑事项6.2 应用考虑事项 第七章、MIG设备名称7.1  设备枚举7.2 CUDA设备枚举第八章、支持的MIG......
  • 仅适用于 Discord.py 中一个用户 ID 的变量
    因此,我试图在某人执行“/logstart”和“/logstop”时为他们创建一个秒表,但我希望多个人能够在不受干扰的情况下启动和停止自己的秒表。@bot.command(name='logstart')asyncdeflogstart(ctx,arg1):awaitctx.message.delete()awaitctx.send('LoghasStarted')......
  • 编写一个程序,提示用户输入3组数,每组数包含5个double类型的数(假设用户都能正确的响应,不
    /编写一个程序,提示用户输入3组数,每组数包含5个double类型的数(假设用户都能正确的响应,不会输入非数值数据)。该程序应完成下列任务。a.把用户输入的数组都放在35的数组中b.计算每组(5个)数组的平均值c.计算所以数据的平均值d.找出这15个数据中的最大值e.打印结果*/#include<s......
  • 【MySQL】事务 【上】{事务的版本支持 事务提交方式 实验结论 用户问题 如何理解隔离
    文章目录1.引入事务事务的版本支持事务提交方式实验结论用户问题2.隔离性如何理解隔离性隔离级别查看与设置隔离性4.四种隔离级别的场景读未提交读已提交可重复读串行化1.引入事务当客户端A检查还有一张票时,将票卖掉,还没有执行更新数据库的时候,客户端B检查了票数......
  • 节点添加jenkins用户
    节点添加jenkins用户在Jenkins服务器上:切换到Jenkins用户的Home目录并查看Jenkins用户的SSH密钥:su-jenkinscat~/.ssh/id_rsa.pub复制Jenkins用户的SSH公钥(id_rsa.pub​文件内容)。在节点服务器上:新建jenkins用户adduserjenkins将jenkins用户添......
  • 使用Shell登录Jenkins
    使用Shell登录Jenkins在root用户下使用sujenkins​命令切换到jenkins​用户时失败.可以先检查jenkins​用户有没有shell权限:grepjenkins/etc/passwd如果jenkins​用户的登录shell设置为/bin/false​,它会阻止用户登录系统。手动编辑/etc/passwd​文件来更改......
  • OpenAI 向部分用户开放 GPT-4o 高级语音模式;AI 视频生成工具 Vidu 全球上线丨 RTE 开
       开发者朋友们大家好: 这里是「RTE开发者日报」,每天和大家一起看新闻、聊八卦。我们的社区编辑团队会整理分享RTE(Real-TimeEngagement)领域内「有话题的新闻」、「有态度的观点」、「有意思的数据」、「有思考的文章」、「有看点的会议」,但内容仅代表编辑的个人观......
  • 询问用户输入,直到他们给出有效的响应
    我正在编写一个接受用户输入的程序。#note:Python2.7usersshoulduse`raw_input`,theequivalentof3.X's`input`age=int(input("Pleaseenteryourage:"))ifage>=18:print("YouareabletovoteintheUnitedStates!")else:pr......
  • 从0开始搭建vue + flask 旅游景点数据分析系统( 五):【用户管理页面、 景点管理页面、个
    本期任务是编写数据用户管理页面(Users)。编写数据景点管理页面(Tours)页面。编写数据个人设置页面(Profile)页面。1编写用户管理页面修改Users.vue:<template><divclass="users-container"><el-cardclass="box-card"><divslot="header"class="hea......
  • 记一次连正确的账密都无法通过控制台登录的处理过程
    背景:用户的一台生产机器在许久之前就出现了SSH无法登录操作系统(Ubuntu22.04系统)的现象,但由于生产环境是有多台机器在支撑业务的,所以坏一台也不会影响业务,但用户近期将此问题反馈了过来想让帮忙解决掉此问题,但询问操作系统内做了哪些操作,给的答复都是很模糊,可以说完全不知道.........