• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

最vue用户登录失效跳转登录页

武飞扬头像
请叫我欧皇i
帮助1

不需要通过后端的token传的时间解析后来判断

思路:在用户登录后进入到布局页面,直接在页面创建后存时间戳,时间一到直接跳转到登录

一,第一种方法

1.在登录页面存当前时间戳

这里使用了封装,没有封装的通过Cookies.set(),存在会话存储还是本地存储还是cookies都行

this.$utils.cookies.set("loginTime",Date.now())

2.在布局页面layout使用定时循环来判断,完整代码

在这我设置了三个时间戳,存的登录时间,失效时间为登录时间相加,还有现在运行时间,注意一定要在跳转到登录页之前清除定时循环任务,不然定时任务还是会一直进行

  1.  
    created () {
  2.  
    this.cookiesTime()
  3.  
    },
  4.  
    methods(){
  5.  
    cookiesTime () {
  6.  
    // 登录时间
  7.  
    let loginTime = parseInt(this.$utils.cookies.get('loginTime'))
  8.  
    // 失效时间,0.01为0.01小时为36秒,24就是一天
  9.  
    let loseTime = loginTime 0.01 * 60 * 60 * 1000
  10.  
    // 现在时间
  11.  
    let newTime = Date.now()
  12.  
    this.$utils.cookies.set('loseTime', loseTime)
  13.  
    // 每次进入新页面时检查用户信息是否过期
  14.  
    let setInterId= setInterval(() => {
  15.  
    let loseTime = this.$utils.cookies.get('loseTime')
  16.  
    // 如果当前时间大于失效时间
  17.  
    if (Date.now() > loseTime) {
  18.  
    this.$utils.cookies.remove("token")
  19.  
    this.$utils.cookies.remove("uuid")
  20.  
    this.$utils.cookies.remove("loginTime")
  21.  
    this.$utils.cookies.remove("loseTime")
  22.  
    // this.$router.push("/login")
  23.  
    this.$alert('登录已失效,请重新登录', '提示', {
  24.  
    confirmButtonText: '确定',
  25.  
    callback: action => {
  26.  
    // 点击确定后清除定时器并且跳转登录页
  27.  
    clearInterval(setInterId)
  28.  
    this.$router.push("/login")
  29.  
    }
  30.  
    });
  31.  
    }
  32.  
    }, 1000) // 每秒检查一次
  33.  
     
  34.  
    }
  35.  
    }
学新通

二.第二种方法(推荐)

上面那种,如果用户自动退出登录,那么定时循环任务还是会进行,推荐使用第二种

1.还在在登录后存当前时间戳

  1.  
    // 只能存在login,不然刷新页面会重新计算
  2.  
    this.$utils.cookies.set("loginTime",Date.now())

2.在路由导航守卫拦截

  1.  
    import { Message } from 'element-ui'
  2.  
    //定义失效时间,5小时
  3.  
    let overTime = 5 * 60 * 60 * 1000
  4.  
    router.beforeEach(async (to, from, next) => {
  5.  
    // 验证当前路由所有的匹配中是否需要有登录验证的
  6.  
    // 这里暂时将cookie里是否存有token作为验证是否登录的条件
  7.  
    const loginTime = util.cookies.get('loginTime');
  8.  
    const token = util.cookies.get('token')
  9.  
    if (token && token !== 'undefined' && loginTime) {
  10.  
    // 携带上登陆成功之后需要跳转的页面完整路径
  11.  
    let date = new Date().getTime();
  12.  
    // 当前时间 - 登录时间 > 设置的过期时间,为过期;则清除token,并强制跳转至登录页
  13.  
    // 反之为有效期,则放行
  14.  
    if (date - loginTime > overTime) {
  15.  
    util.cookies.remove("loginTime")
  16.  
    util.cookies.remove("token")
  17.  
    // 显示提示
  18.  
    Message({
  19.  
    message: "登录已失效,请重新登录",
  20.  
    type: 'error',
  21.  
    duration: 5 * 1000
  22.  
    })
  23.  
    next({
  24.  
    name: 'login',
  25.  
    query: {
  26.  
    redirect: to.fullPath
  27.  
    }
  28.  
    })
  29.  
    } else {
  30.  
    next();
  31.  
    }
  32.  
     
  33.  
    } else {
  34.  
    next({
  35.  
    name: 'login',
  36.  
    query: {
  37.  
    redirect: to.fullPath
  38.  
    }
  39.  
    })
  40.  
    }
  41.  
    })
学新通

这样就实现了在页面调转的时候会提示用户登录时效并且直接跳转到登录页,如果用户退出登录也不会一直计算

本文章到此结束,希望对你有所帮助~

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanhgfafhf
系列文章
更多 icon
同类精品
更多 icon
继续加载