vue实现用户长时间不操作自动退出登录功能的实现代码


Posted in Javascript onJuly 23, 2020

一、需求说明

昨天后端开发人员让我实现一个网页锁屏,当时我一头雾水,问他为啥搞的跟安卓系统一样。他的回复是"看起来帅点"。

首先我们梳理下逻辑,先来个简化版的,用户长时间未操作时,返回登录页

二、思路

使用 mouseover 事件来监测是否有用户操作页面,写一个定时器间隔特定时间检测是否长时间未操作页面,如果是,退出登陆,清除token,返回登录页

三、实现

【1】在util文件夹下创建一个storage.js封装localStorage方法

export default {
 setItem(key, value) {
 value = JSON.stringify(value);
 window.localStorage.setItem(key, value)
 },
 getItem(key, defaultValue) {
 let value = window.localStorage.getItem(key)
 try {
  value = JSON.parse(value);
 } catch {}
 return value || defaultValue
 },
 removeItem(key) {
 window.localStorage.removeItem(key)
 },
 clear() {
 window.localStorage.clear()
 },
}

 

【2】在util文件夹下创建一个astrict.js

每隔30s去检查一下用户是否过了30分钟未操作页面

// 引入路由和storage工具函数
import storage from '@/utils/storage'
import router from "@/common/router"

let lastTime = new Date().getTime()
let currentTime = new Date().getTime()
let timeOut = 30 * 60 * 1000 //设置超时时间: 30分钟

window.onload = function () {
 window.document.onmousedown = function () {
 stroage.setItem("lastTime", new Date().getTime())
 }
};

function checkTimeout() {
 currentTime = new Date().getTime()		//更新当前时间
 lastTime = stroage.getItem("lastTime");

 if (currentTime - lastTime > timeOut) { //判断是否超时

 // 清除storage的数据(登陆信息和token)
 storage.clear()
 // 跳到登陆页
 if(router.currentRouter.name == 'login') return // 当前已经是登陆页时不做跳转
 router.push({ name: 'login' })
 }
}

export default function () {
 /* 定时器 间隔30秒检测是否长时间未操作页面 */
 window.setInterval(checkTimeout, 30000);
}

 

【2】在main.js引入astrict.js

import Astrict from '@/utils/astrict'
Vue.use(Astrict)

四、锁屏

实现网页锁屏的思路和上面自动退出登录类似,稍微改动实现如下:

【1】用户长时间未操作,弹出设置锁屏密码弹框设置锁屏密码

【2】密码(password)和锁屏状态(isLock)存入localStorage 和vuex

【3】设置成功后跳转到锁屏登录页

【4】 在路由里面判断vuex里面的isLock(为true锁屏状态不能让用户后退url和自行修改url跳转页面否则可以)

【5】用户在锁屏登录页输入刚刚设置的锁屏密码,即可解开锁屏

总结

到此这篇关于vue实现用户长时间不操作自动退出登录功能的实现代码的文章就介绍到这了,更多相关vue 长时间不操作自动退出登录内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Javascript 相关文章推荐
Js+XML 操作
Sep 20 Javascript
juqery 学习之四 筛选查找
Nov 30 Javascript
自定义右键属性覆盖浏览器默认右键行为实现代码
Feb 02 Javascript
jQuery实现高亮显示的方法
Mar 10 Javascript
canvas实现十二星座星空图
Feb 14 Javascript
webpack教程之webpack.config.js配置文件
Jul 05 Javascript
Angular2+国际化方案(ngx-translate)的示例代码
Aug 23 Javascript
vue多页面开发和打包正确处理方法
Apr 20 Javascript
JavaScript实现简易聊天对话框(加滚动条)
Feb 10 Javascript
Vue 基于 vuedraggable 实现选中、拖拽、排序效果
May 18 Javascript
vue3.0 的 Composition API 的使用示例
Oct 26 Javascript
js基于div丝滑实现贝塞尔曲线
Sep 23 Javascript
在vue中封装的弹窗组件使用队列模式实现方法
Jul 23 #Javascript
基于JS实现计算24点算法代码实例解析
Jul 23 #Javascript
javascript递归函数定义和用法示例分析
Jul 22 #Javascript
简单了解vue 插值表达式Mustache
Jul 22 #Javascript
详解node.js 事件循环
Jul 22 #Javascript
jQuery+ThinkPHP实现图片上传
Jul 23 #jQuery
详解vue中v-on事件监听指令的基本用法
Jul 22 #Javascript
You might like
PHP面向对象教程之自定义类
2014/06/10 PHP
thinkPHP中create方法与令牌验证实例浅析
2015/12/08 PHP
php结合md5的加密解密算法实例
2016/09/30 PHP
php5对象复制、clone、浅复制与深复制实例详解
2019/08/14 PHP
基于jquery插件制作左右按钮与标题文字图片切换效果
2013/11/07 Javascript
千分位数字格式化(用逗号隔开 代码已做了修改 支持0-9位逗号隔开)的JS代码
2013/12/05 Javascript
浅析JavaScript基本类型与引用类型
2014/05/28 Javascript
js 判断所选时间(或者当前时间)是否在某一时间段的实现代码
2015/09/05 Javascript
BootStrap给table表格的每一行添加一个按钮事件
2017/09/07 Javascript
javascript基于定时器实现进度条功能实例
2017/10/13 Javascript
js取0-9随机取4个数不重复的数字代码实例
2019/03/27 Javascript
小程序如何使用分包加载的实现方法
2019/05/22 Javascript
jquery中为什么能用$操作
2019/06/18 jQuery
countup.js实现数字动态叠加效果
2019/10/17 Javascript
微信小程序的引导页实现代码
2020/06/24 Javascript
OpenLayers3实现对地图的基本操作
2020/09/28 Javascript
[00:52]黑暗之门更新 新英雄孽主驾临DOTA2
2016/08/24 DOTA
Python基于twisted实现简单的web服务器
2014/09/29 Python
python使用7z解压apk包的方法
2015/04/18 Python
Python pyinotify日志监控系统处理日志的方法
2018/03/08 Python
pycharm 在windows上编辑代码用linux执行配置的方法
2018/10/27 Python
用Python实现大文本文件切割的方法
2019/01/12 Python
python基于plotly实现画饼状图代码实例
2019/12/16 Python
Windows下python3安装tkinter的问题及解决方法
2020/01/06 Python
Python自带的IDE在哪里
2020/07/01 Python
Vs Code中8个好用的python 扩展插件
2020/10/12 Python
详解Sticky Footer 绝对底部的两种套路
2017/11/03 HTML / CSS
法国时尚品牌乐都特瑞士站:La Redoute瑞士
2016/09/05 全球购物
经验丰富大学生村干部自我鉴定
2014/01/22 职场文书
经典洗发水广告词
2014/03/13 职场文书
年度优秀员工获奖感言
2014/08/15 职场文书
个人授权委托书格式
2014/08/30 职场文书
无私奉献演讲稿
2014/09/04 职场文书
十大最强妖精系宝可梦,哲尔尼亚斯实力最强,第五被称为大力士
2022/03/18 日漫
Android Rxjava3 使用场景详解
2022/04/07 Java/Android
python 使用pandas读取csv文件的方法
2022/12/24 Python