当前位置:首页 > VUE

vue如何实现token失效

2026-02-21 10:07:15VUE

Vue 中实现 Token 失效处理的方案

在 Vue 项目中,处理 Token 失效通常需要结合前端和后端的协作。以下是几种常见的实现方式:

拦截请求并检查 Token 状态

使用 Axios 拦截器可以在每次请求时检查 Token 是否有效。如果后端返回 401 状态码,表示 Token 已失效,可以跳转到登录页面。

axios.interceptors.response.use(
  response => response,
  error => {
    if (error.response.status === 401) {
      // 清除本地存储的 Token
      localStorage.removeItem('token')
      // 跳转到登录页面
      router.push('/login')
    }
    return Promise.reject(error)
  }
)

定时检查 Token 有效期

对于 JWT 等有明确过期时间的 Token,可以在前端设置定时器检查 Token 是否即将过期。

const checkTokenExpiration = () => {
  const token = localStorage.getItem('token')
  if (token) {
    const decoded = jwt_decode(token)
    const currentTime = Date.now() / 1000
    if (decoded.exp - currentTime < 300) { // 5分钟内过期
      refreshToken()
    }
  }
}

// 每分钟检查一次
setInterval(checkTokenExpiration, 60000)

实现 Token 自动刷新

当检测到 Token 即将过期时,可以调用刷新 Token 的接口获取新的 Token。

const refreshToken = async () => {
  try {
    const response = await axios.post('/refresh-token', {
      refreshToken: localStorage.getItem('refreshToken')
    })
    localStorage.setItem('token', response.data.token)
  } catch (error) {
    // 刷新失败,跳转登录
    router.push('/login')
  }
}

结合路由守卫处理

可以在全局路由守卫中检查 Token 状态,防止用户访问需要认证的页面时 Token 已失效。

router.beforeEach((to, from, next) => {
  if (to.matched.some(record => record.meta.requiresAuth)) {
    if (!localStorage.getItem('token')) {
      next('/login')
    } else {
      next()
    }
  } else {
    next()
  }
})

服务器主动通知 Token 失效

对于 WebSocket 或 Server-Sent Events 等长连接场景,服务器可以主动通知客户端 Token 已失效。

vue如何实现token失效

const eventSource = new EventSource('/token-status')
eventSource.onmessage = (event) => {
  if (event.data === 'token_invalid') {
    localStorage.removeItem('token')
    router.push('/login')
  }
}

以上方法可以单独使用,也可以组合使用,根据项目具体需求选择最适合的方案。关键在于确保用户 Token 失效时能够及时处理,既保证安全性又不影响用户体验。

标签: 如何实现vue
分享给朋友:

相关文章

vue实现生成二维码

vue实现生成二维码

使用qrcode.vue库生成二维码 安装qrcode.vue库: npm install qrcode.vue --save 在Vue组件中使用: <template> <…

vue实现tablegrid

vue实现tablegrid

Vue 实现 TableGrid 的方法 使用 Element UI 的 Table 组件 Element UI 提供了强大的 Table 组件,可以快速实现表格布局。安装 Element UI 后,…

vue实现截图

vue实现截图

Vue 实现截图的方法 使用 html2canvas 库 安装 html2canvas 库: npm install html2canvas 在 Vue 组件中使用: import html2ca…

vue插槽实现

vue插槽实现

插槽的基本概念 Vue插槽(Slot)是一种内容分发机制,允许父组件向子组件传递模板片段,子组件通过<slot>标签定义接收位置。插槽的核心作用是增强组件的灵活性和复用性。 默认插槽 子…

vue grid实现

vue grid实现

Vue Grid 实现方法 在 Vue 中实现网格布局可以通过多种方式完成,包括使用原生 CSS Grid、第三方组件库或自定义组件。以下是几种常见方法: 使用原生 CSS Grid 通过 Vue…

vue 实现筛选

vue 实现筛选

实现筛选功能的基本方法 在Vue中实现筛选功能通常涉及以下几个核心步骤: 数据绑定与筛选逻辑 使用v-model绑定筛选条件到Vue实例的数据属性,结合计算属性实现动态筛选: data() {…