当前位置:首页 > 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 中实现密码框功能,可以通过原生 HTML 结合 Vue 指令或使用第三方组件库完成。以下是几种常见方案: 原生 HTML + Vue 双向绑定 <templ…

vue 实现jqslidedown

vue 实现jqslidedown

在 Vue 中实现类似 jQuery 的 slideDown 效果,可以通过 Vue 的过渡系统或 CSS 动画结合动态样式绑定来实现。以下是几种实现方式: 使用 Vue Transition 组件…

vue实现抖动

vue实现抖动

Vue 实现抖动效果 在 Vue 中实现抖动效果可以通过 CSS 动画或 JavaScript 动画库来实现。以下是几种常见的方法: 使用 CSS 动画 通过定义 @keyframes 动画并在 V…

vue实现白板

vue实现白板

Vue实现白板功能 使用Vue实现白板功能可以通过HTML5的Canvas API结合Vue的响应式特性来完成。以下是实现白板功能的关键步骤: 安装依赖 在Vue项目中安装必要的依赖,如vue-dr…

vue实现mvvm

vue实现mvvm

Vue 实现 MVVM 模式 MVVM(Model-View-ViewModel)是一种前端架构模式,Vue 是其典型实现之一。MVVM 的核心是通过数据绑定和响应式系统实现视图与数据的自动同步。…

vue工序实现

vue工序实现

Vue 工序实现方法 在Vue中实现工序(或流程)功能,通常涉及状态管理、组件通信和动态渲染。以下是几种常见方法: 使用动态组件 通过Vue的<component :is="currentCo…