Vue2/3 登录后用户无操作半小时后自动清除登录信息退出登录下线(示例代码)

 更新时间:2024年07月19日 10:18:17   作者:星 辰.  
这篇文章主要介绍了Vue2/3 登录后用户无操作半小时后自动清除登录信息退出登录下线,本文通过实例代码给大家介绍的非常详细,需要的朋友可以参考下

Vue2/3 登录后用户无操作半小时后自动清除登录信息退出登录下线

1、打开App.vue 页面,然后新增监听全局点击事件的方法

data() {
    return {
      lastTime: null,
      timeOut: 10 * 100 * 60,
    }
  },
metaInfo() {
        return {
            title: this.$store.state.settings.dynamicTitle && this.$store.state.settings.title,
            titleTemplate: title => {
                return title ? `${title} - ${process.env.VUE_APP_TITLE}` : process.env.VUE_APP_TITLE
            }
        }
  },
  created() {
    this.lastTime = new Date().getTime()
  },
methods: {
    //全局监听得点击事件
    isTimeOut() {
      var currentTime = new Date().getTime();
      // 判断上次最后一次点击的时间和这次点击的时间间隔
       if (currentTime - this.lastTime > this.timeOut) {
        //这个是判断 当前用户是否登录,根据自己的情况写
        // if (null != sessionStorage.getItem('token')) {
        this.$alert('身份验证已过期,请重新登录', '提示', {
          confirmButtonText: '确定',
          callback: action => {
           //这里写路由(跳转到登录页)
           this.$router.replace('/login')
          }
        });
        // }
      } else {
        // 如果在期限内点击,则把这次点击的时间覆盖掉之前存的最后一次点击的时间
        this.lastTime = new Date().getTime()
      }
    }
  }

3步解决vue实现用户长时间不点击操作,自动退出登录功能

1.在util文件夹下创建一个storage.js封装localStorage方法,js文件内容如下
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,js文件内容如下,引入的文件根据自己实际路径
// 引入路由和storage工具函数
import storage from '../utils/storage'
import router from '../router'  
let lastTime = new Date().getTime()
let currentTime = new Date().getTime()
let timeOut = 1 * 60 * 1000 //设置超时时间: 30分钟
window.onload = function() {
  window.document.onmousedown = function() {
    storage.setItem('lastTime', new Date().getTime())
  }
}
function checkTimeout() {
  currentTime = new Date().getTime() //更新当前时间
  lastTime = storage.getItem('lastTime')
  console.log(lastTime)
  if (currentTime - lastTime > timeOut) {
    //判断是否超时
    // 清除storage的数据(登陆信息和token)
    storage.clear()
    console.log(router)
    // 跳到登陆页
    // if (router.currentRouter.name == 'login') return // 当前已经是登陆页时不做跳转
    router.push({ name: 'login' })
  }
}
export default function() {
  /* 定时器 间隔30秒检测是否长时间未操作页面 */
  window.setInterval(checkTimeout, 3000)
}
=======================================================
3.在main.js引入astrict.js
import Astrict from '../src/utils/astrict.js'
Vue.use(Astrict)
另附原文地址:https://www.uoften.com/article/186408.html

Vue.js框架:超出配置登出时间就会退出登陆(前端设置)

1、login.vue

     在登陆时候记下点击登陆的时间;

<strong>sessionStorage.setItem("lastClickTime", new Date().getTime());</strong>
methods:{
      login(){
           this.$api.commn.login(this.loginForm.username, this.loginForm.password).then((result) => {   
             let res = result.data;
             let token = "Bearer " + res.token;
             this.$storage.token.set(token);
             this.$storage.user.set(res);
             //记录点击时间
             sessionStorage.setItem("lastClickTime", new Date().getTime());
          })
          .catch((error) => {
            console.log("error");
          });
       }
   }

2、home.vue

  代码精简了,html只剩下左边菜单栏,展示定时器写在哪个页面,各个项目不同,对应的不一定是home.vue,函数只写了定时器的,仅供参考;

  1. data先定义timer

  2.钩子函数:methods里写定时器实现函数,created里捕获记录每次点击的时间,mounted里执行定时器,destroyed里销毁定时器。

<template>
    <div class="sidebar" style="background-color: rgb(50, 65, 87)">
      <!--左侧菜单 start    *********************************************************************-->
      <el-menu
        class="sidebar-el-menu"
        :collapse="collapse"
        router=""
        :default-active="onRoutes">
        <template v-for="menu in menus">
          <template v-if="menu.subs && menu.subs.length > 0">
            <el-submenu :index="menu.id + ''">
              <template slot="title">
                <i :class="menu.icon"></i>
                <span>{{ $t(menu.name) }}</span>
              </template>
            </el-submenu>
          </template>
      </el-menu>
      <!--左侧菜单 end    *********************************************************************-->
    </div>
    <div class="content-box" :class="{ 'content-collapse': collapse }">
      <v-tags></v-tags>
      <!--内容 start    *********************************************************************-->
      <!--内容 end    *********************************************************************-->
    </div>
</template>
<script>
export default {
  name: "home",
  data() {
    return {
      timer: null,
    };
  },
  methods: {
    isTimeOut() {
      // 使⽤定时器之前,要清除⼀下定时器
      clearInterval(this.timer);
     // 定时器
      this.timer = setInterval(() => { 
        let times = 10 * 60 * 1000;//配置的是10min 
        let lastClickTime = sessionStorage.getItem("lastClickTime") * 1; // 把上次点击时候的字符串时间转换成数字时间
        let nowTime = new Date().getTime(); // 获取当前时间
        // 当前时间减去上次点击时间超出配置的登出时间,就提⽰登录退出
        if (nowTime - lastClickTime > times) {
          // 提⽰⼀下⽤户
          this.$message({ type: "warning", message: "超时了,已退出登录" });
          // 这⾥要清除定时器,结束任务
          clearInterval(this.timer);
          // 最后返回到登录页
          this.$router.push({ path: "/login" });
        }
      }, 1000);
    },
  },
  mounted() {
    //在这执行定时器
     this.isTimeOut()
  },
  created() {
    window.addEventListener("click",() => {
        // 为了⽅便,我们把点击事件的时间直接存到sessionStorage中去,这样⽅便获取⽐较
        sessionStorage.setItem("lastClickTime", new Date().getTime());
      },
      //true 捕获点击事件
      true
    );
  },
  destroyed: function () {
     clearInterval(this.timer);
     window.removeEventListener("click", () => {}, true);
  },
};
</script>

到此这篇关于Vue2/3 登录后用户无操作半小时后自动清除登录信息退出登录下线的文章就介绍到这了,更多相关vue自动退出登录内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 详解Vuex的属性

    详解Vuex的属性

    Vuex是专为Vue.js应用程序开发的状态管理模式,这篇文章主要介绍了Vuex的属性,本文通过示例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-08-08
  • vue使用element-plus依赖实现表格增加的示例代码

    vue使用element-plus依赖实现表格增加的示例代码

    这篇文章主要为大家详细介绍了vue使用element-plus依赖实现表格增加,文中示例代码讲解的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2023-12-12
  • vue条件渲染列表渲染原理示例详解

    vue条件渲染列表渲染原理示例详解

    这篇文章主要为大家介绍了vue条件渲染列表渲染原理示例解析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-07-07
  • 基于Vue实现树形穿梭框的示例代码

    基于Vue实现树形穿梭框的示例代码

    这篇文章主要为大家介绍了如何利用Vue实现一个树形穿梭框,elementUI和ant-d组件库的穿梭框组件效果都不是很好,所以本文将利用一个新的插件来实现,需要的可以参考一下
    2022-04-04
  • vue3:setup语法糖使用教程

    vue3:setup语法糖使用教程

    <script setup>是在单文件组件中使用Composition API的编译时语法糖,下面这篇文章主要给大家介绍了关于vue3:setup语法糖使用的相关资料,需要的朋友可以参考下
    2022-08-08
  • laravel5.3 vue 实现收藏夹功能实例详解

    laravel5.3 vue 实现收藏夹功能实例详解

    这篇文章主要介绍了laravel5.3 vue 实现收藏夹功能,本文通过实例代码给大家介绍的非常详细,需要的朋友可以参考下
    2018-01-01
  • VUE配置proxy代理的开发测试及生产环境

    VUE配置proxy代理的开发测试及生产环境

    这篇文章主要为大家介绍了VUE配置proxy代理的开发环境、测试环境、生产环境详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-08-08
  • vue开发树形结构组件(组件递归)

    vue开发树形结构组件(组件递归)

    这篇文章主要为大家详细介绍了vue开发树形结构组件的方法,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-08-08
  • vue3限制table表格选项个数的解决方法

    vue3限制table表格选项个数的解决方法

    这篇文章主要为大家详细介绍了vue3限制table表格选项个数的解决方法,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-04-04
  • 在vue中利用v-html按分号将文本换行的例子

    在vue中利用v-html按分号将文本换行的例子

    今天小编就为大家分享一篇在vue中利用v-html按分号将文本换行的例子,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-11-11

最新评论