当前位置:首页 > 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 已失效。

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

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

vue如何实现token失效

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

相关文章

vue实现菜单栏锚点

vue实现菜单栏锚点

实现锚点菜单的基本思路 在Vue中实现菜单栏锚点功能,主要涉及两个方面:创建可跳转的锚点位置,以及菜单项的点击滚动控制。通过监听滚动事件可以高亮当前可见区域的对应菜单项。 创建页面锚点位置 在需要…

vue优秀实现

vue优秀实现

Vue.js 优秀实现方法 响应式数据管理 使用 Vue 的 ref 和 reactive 处理基础类型和对象类型数据,结合 computed 计算属性优化渲染性能。对于复杂状态,推荐 Pinia 替…

vue实现frame

vue实现frame

Vue 中实现 iframe 的方法 在 Vue 中可以通过直接使用 <iframe> 标签或动态绑定 src 属性来实现 iframe 功能。 基本用法 <template&g…

vue实现必填

vue实现必填

Vue 实现表单必填验证的方法 在Vue中实现表单必填验证可以通过多种方式完成,以下是几种常见的方法: 使用HTML5原生属性 最简单的必填验证可以通过HTML5的required属性实现:…

vue实现分发

vue实现分发

Vue 实现分发的方法 在 Vue 中,分发(Distribution)通常指的是将内容从父组件传递到子组件,或者通过插槽(Slots)机制让父组件控制子组件的部分渲染内容。以下是几种常见的实现分发的…

vue 实现loading

vue 实现loading

Vue 实现 Loading 的方法 使用 v-if 和 v-show 控制显示 在 Vue 中可以通过 v-if 或 v-show 控制 loading 组件的显示与隐藏。v-if 会动态创建或销毁…