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 相关文章推荐
JavaScript 高级篇之DOM文档,简单封装及调用、动态添加、删除样式(六)
Apr 07 Javascript
javascript 在firebug调试时用console.log的方法
May 10 Javascript
js 为label标签和div标签赋值的方法
Aug 08 Javascript
基于jquery的禁用右键、文本选择功能、复制按键的实现代码
Aug 27 Javascript
js截取固定长度的中英文字符的简单实例
Nov 22 Javascript
JS刷新父窗口的几种方式小结(推荐)
Nov 09 Javascript
domReady的实现案例
Nov 23 Javascript
AngularJS中ng-class用法实例分析
Jul 06 Javascript
JS实现图片轮播效果实例详解【可自动和手动】
Apr 04 Javascript
JS实现继承的几种常用方式示例
Jun 22 Javascript
阿望教你用vue写扫雷小游戏
Jan 20 Javascript
vue实现移动端拖动排序
Aug 21 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
Yii+upload实现AJAX上传图片的方法
2016/07/13 PHP
php魔术方法功能与用法实例分析
2016/10/19 PHP
php制作圆形用户头像的实例_自定义封装类源代码
2017/09/18 PHP
jQuery.extend 函数详解
2012/02/03 Javascript
js实现同一页面多个不同运动效果的方法
2015/04/10 Javascript
js实现每日自动换一张图片的方法
2015/05/04 Javascript
JavaScript中的getTime()方法使用详解
2015/06/10 Javascript
Bootstrap幻灯片轮播图支持触屏左右手势滑动的实现方法
2016/10/13 Javascript
vue.js 实现输入框动态添加功能
2018/06/25 Javascript
Vue异步组件处理路由组件加载状态的解决方案
2018/09/07 Javascript
Vue监听事件实现计数点击依次增加的方法
2018/09/26 Javascript
Element-UI踩坑之Pagination组件的使用
2018/10/29 Javascript
用WebStorm进行Angularjs 2开发(环境篇:Windows 10,Angular-cli方式)
2018/12/05 Javascript
微信小程序配置服务器提示验证token失败的解决方法
2019/04/03 Javascript
js用正则表达式筛选年月日的实例方法
2021/01/04 Javascript
[54:24]Optic vs TNC 2018国际邀请赛小组赛BO2 第二场
2018/08/18 DOTA
[04:00]黄浦江畔,再会英雄——完美世界DOTA2 TI9应援视频
2019/07/31 DOTA
跨平台python异步回调机制实现和使用方法
2013/11/26 Python
Python实现的中国剩余定理算法示例
2017/08/05 Python
python实现对指定输入的字符串逆序输出的6种方法
2018/04/26 Python
python 计算一个字符串中所有数字的和实例
2019/06/11 Python
python binascii 进制转换实例
2019/06/12 Python
Django1.11自带分页器paginator的使用方法
2019/10/31 Python
如何用python 操作zookeeper
2020/12/28 Python
印度最好的在线药品订购网站:PharmEasy
2018/11/30 全球购物
ETO男装官方网店:ETO Jeans
2019/02/28 全球购物
.NET面试题:什么是值类型和引用类型
2016/01/12 面试题
销售行政专员职责
2014/01/03 职场文书
人力资源作业细则
2014/03/03 职场文书
教师党的群众路线教育实践活动学习心得体会
2014/10/30 职场文书
考试后的感想
2015/08/07 职场文书
读《庄子》有感:美而不自知
2019/11/06 职场文书
Golang 获取文件md5校验的方法以及效率对比
2021/05/08 Golang
eval(cmd)与eval($cmd)的区别与联系
2021/07/07 PHP
Nginx设置HTTPS的方法步骤 443证书配置方法
2022/03/21 Servers
《勇者辞职不干了》上卷BD发售宣传CM公开
2022/04/08 日漫