vue页面长时间未操作,弹出提示,清除token,退出登录

一、背景

今天突然来了任务,把项目更新一下,把安全性增加,当用户长时间不操作电脑的时候,为了防止别人进行操作,弹出提示,清除token,退出登录,进入登录页,重新登录;如果在登录页面,则不需要弹窗提示,别忘掉这种情况。

二、实现

  1. 在App.vue里进行配置

<template>
    <a-locale-provider :lacale="locale"> // ant desing自带切换中英文的组建套在项目最外层即可(传递属性控制)
        <div id="app" @click="isTimeOut">
            <router-view />
        </div>
    </a-locale-provider>
</template>


<script>
    data() {
        return {
            lastTime: null, // 鼠标最后一次点击时间
            timeOut: 30 * 60 * 1000, // 三十分钟未检测到鼠标点击就退出
        }    
    },
    created() {
        this.lastTime = new Date().getTime()  
    },
    methods: {
        isTimeOut () {
            var currentTime = new Date().getTime()
            if (currentTime - this.lastTime > this.timeOut) {
                if (sessionStorage.getItem('token')) { // 如果是登录状态
                    sessionStorage.clear()
                    Modal.warning({ // 使用的是antd的warning框,可以用其他的弹窗
                        title: '提示',
                        content: '长时间未操作,请重新登录',
                        onOk: async () => {
                            this.$router.replace('/login')
                            this.lastTime = new Date().getTime()
                        }
                    })
                } else {
                    this.lastTime = new Date().getTime()
                }
            } else {
                this.lastTime = new Date().getTime()
            }
        }
    }
</script>

Vue项目中,为了实现用户登录状态的自动退出功能,当用户长时间进行任何操作(如点击、输入等),可以利用浏览器的`visibilitychange`事件和定时器结合来检测用户的活动状态。通常的做法是在用户成功登录后设置一个计时器,并在`visibilitychange`事件触发时检查当前页面是否可见: ```javascript // 定义一个全局变量保存用户登录状态 const userLoggedIn = true; // 设置超时时间(例如60分钟) let timeoutId; // 页面加载完成后,开始计时 window.addEventListener('load', function() { startAutoLogout(); }); function startAutoLogout() { // 如果用户已登录 if (userLoggedIn) { // 每隔一段时间(比如5秒)检查一次页面可见性 timeoutId = setTimeout(function() { checkUserActivity(); }, 5000); } } // 当页面可见性改变时,处理逻辑 window.addEventListener('visibilitychange', function(event) { checkUserActivity(); }); function checkUserActivity() { // 获取当前页面可见性状态 const isPageVisible = document.visibilityState === 'visible'; // 如果页面可见并且已设置了超时 if (isPageVisible && timeoutId) { // 重置定时器 clearTimeout(timeoutId); // 重新开始计时 startAutoLogout(); } else if (!isPageVisible) { // 若页面不可见,执行登出逻辑 logoutFunction(); // 调用登出函数,实际业务中这里可能需要清除token或跳转到登录页 } } // 登录函数 function logoutFunction() { userLoggedIn = false; // 清除相关状态或数据 } ``` 在这个例子中,`logoutFunction()`是你自定义的登出处理函数,可以根据实际情况调整。需要注意的是,这只是一个基础示例,实际应用中还需要考虑到其他因素,如跨域请求、网络状况下的处理等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值