vue3简单使用路由守卫

在登录之后,我们会存储一个token,并且设置一段时间的有效期

function handleSubmit(valid, { username, password }) {
    if (valid) {
        if (username === 'lin' && password === '123456') {
            //this.$Message.info('This is a info tip');
            Message.success('登录成功');
            store.commit('setUsername', username);
            store.commit('setSelectedMenuName', '1');
            const expirationTime = Date.now() + 2 * 60 * 60* 1000; // 2小时后的时间戳
            localStorage.setItem('token', 'lin');
            localStorage.setItem('token_expiration', expirationTime.toString());
            router.push('/');
        } else {
            // 可以在这里处理验证失败或用户名/密码不匹配的情况
            console.error('Invalid username or password, or form is not valid.');
        }
    }
}
</script>

在这里:

localStorage本身没有过期机制,所以需要自己实现一个。一种常见的方法是在存储token的同时,也存储一个时间戳,这里表示token的过期时间(2个小时后)。

在路由中设置:

// 全局守卫:登录拦截 本地没有存token,请重新登录
router.beforeEach((to, from, next) => {
  const token = localStorage.getItem('token');
  const expirationTimeStr = localStorage.getItem('token_expiration') ?? '0';
  const expirationTime = parseInt(expirationTimeStr, 10);

  if (!token) {
    // 没有token,重定向到登录页面
    if (to.name !== 'login') {
      next({ name: 'login' });
    } else {
      next();
    }
  } else if (Date.now() > expirationTime) {
    // token已过期,清除token并重定向到登录页面
    Message.success('身份过期,请重新登录');
    localStorage.removeItem('token');
    localStorage.removeItem('token_expiration');
    if (to.name !== 'login') {
      next({ name: 'login' });
    } else {
      next();
    }
  } else {
    // token有效,继续路由
    next();
  }
});

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值