当前位置:首页 > 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异步组建实现原理

Vue 异步组件实现原理 Vue 的异步组件允许将组件按需加载,通常用于代码分割或延迟加载非关键组件。其核心原理基于 Promise 和动态导入。 基本实现方式 通过 defineAsyncComp…

vue实现pie

vue实现pie

Vue 实现饼图 在 Vue 中实现饼图通常可以通过第三方图表库(如 ECharts、Chart.js 或 Highcharts)来完成。以下是使用 ECharts 和 Chart.js 的两种常见方…

vue实现ajax

vue实现ajax

Vue 中实现 AJAX 的几种方法 在 Vue 中实现 AJAX 请求可以通过原生 JavaScript 的 XMLHttpRequest、第三方库如 axios 或 fetch API 来完成。以…

tabbar 实现 vue

tabbar 实现 vue

在 Vue 中实现 TabBar 功能可以通过多种方式完成,以下是几种常见的方法: 使用 Vue Router 结合自定义组件 创建一个自定义的 TabBar 组件,结合 Vue Router 实现…

vue 实现拖拉

vue 实现拖拉

Vue 实现拖拽功能的方法 使用 HTML5 原生拖放 API HTML5 提供了原生的拖放 API,可以通过 draggable 属性、dragstart、dragend、dragover 和 dr…

vue实现pwa

vue实现pwa

Vue 实现 PWA 的步骤 Vue 结合 PWA(Progressive Web App)可以创建离线可用的 Web 应用。以下是实现方法: 安装 Vue CLI 并创建项目 确保已安装 Vue…