vue 离开页面时间_vue实现用户长时间不操作,自动退出登录

一、需求说明

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

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

二、思路

使用 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】用户在锁屏登录页输入刚刚设置的锁屏密码,即可解开锁屏

文章每周持续更新,可以微信搜索「 前端大集锦 」第一时间阅读,回复【视频】【书籍】领取200G视频资料和30本PDF书籍资料

​​

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值