当前位置:首页 > VUE

vue实现过期接口拦截

2026-01-22 00:52:58VUE

vue实现过期接口拦截的方法

在Vue项目中实现过期接口拦截通常需要结合axios拦截器和后端返回的状态码或自定义字段。以下是几种常见实现方式:

基于HTTP状态码的拦截

当后端返回特定状态码(如401)时触发拦截逻辑:

vue实现过期接口拦截

// axios响应拦截器
axios.interceptors.response.use(response => {
  return response
}, error => {
  if (error.response.status === 401) {
    // 清除本地token
    localStorage.removeItem('token')
    // 跳转登录页
    router.push('/login')
    // 可添加提示
    Message.error('登录已过期,请重新登录')
  }
  return Promise.reject(error)
})

基于自定义响应字段的拦截

当后端在响应体中返回特定字段时触发拦截:

axios.interceptors.response.use(response => {
  if (response.data.code === 1001) {
    // 处理token过期逻辑
    refreshToken().then(() => {
      return axios(response.config)
    })
  }
  return response
})

自动刷新token方案

实现token过期后自动刷新并重发请求:

vue实现过期接口拦截

let isRefreshing = false
let requests = []

axios.interceptors.response.use(response => {
  return response
}, error => {
  const { config, response } = error
  if (response.status === 401 && !config._retry) {
    if (!isRefreshing) {
      isRefreshing = true
      return refreshToken().then(res => {
        const { token } = res.data
        setToken(token)
        config.headers.Authorization = `Bearer ${token}`
        requests.forEach(cb => cb(token))
        requests = []
        return axios(config)
      }).finally(() => {
        isRefreshing = false
      })
    } else {
      return new Promise(resolve => {
        requests.push(token => {
          config.headers.Authorization = `Bearer ${token}`
          resolve(axios(config))
        })
      })
    }
  }
  return Promise.reject(error)
})

结合Vuex的全局状态管理

在store中管理登录状态和拦截逻辑:

// store/modules/user.js
actions: {
  checkToken({ commit }, error) {
    if (error.response.status === 401) {
      commit('CLEAR_USER_INFO')
      router.push('/login')
    }
  }
}

// axios拦截器中调用
error => {
  store.dispatch('user/checkToken', error)
  return Promise.reject(error)
}

前端主动检查token有效期

在请求发出前检查token是否即将过期:

axios.interceptors.request.use(config => {
  const token = getToken()
  if (token && isTokenExpired(token)) {
    // 主动刷新token或提示用户
    return refreshToken().then(() => {
      config.headers.Authorization = `Bearer ${getToken()}`
      return config
    })
  }
  return config
})

注意事项

  1. 避免重复刷新token,需要添加标志位控制
  2. 对于并发请求,需要队列管理等待中的请求
  3. 刷新token失败后应跳转登录页
  4. 生产环境应添加错误边界处理
  5. 可结合路由守卫实现全局拦截

以上方案可根据实际项目需求组合使用,建议与后端协商统一的token过期处理规范。

标签: 接口vue
分享给朋友:

相关文章

vue实现导航栏切图

vue实现导航栏切图

Vue 实现导航栏切图 使用 Vue Router 实现基础导航 在 Vue 项目中,可以通过 Vue Router 实现导航栏的路由切换。创建一个导航栏组件,并在其中使用 <router-li…

vue实现点击旋转轮盘

vue实现点击旋转轮盘

实现点击旋转轮盘效果 在Vue中实现点击旋转轮盘效果,可以通过CSS动画和Vue的数据绑定结合完成。以下是一个完整的实现方案: 准备工作 需要安装Vue.js环境,可以通过CDN引入或使用Vue…

vue实现批量

vue实现批量

Vue 实现批量操作的方法 在 Vue 中实现批量操作通常涉及选择多个项目并执行统一处理,例如批量删除、批量更新等。以下是几种常见实现方式: 表格多选批量操作 使用 el-table 配合复选框实…

computed vue 实现

computed vue 实现

computed 在 Vue 中的基本用法 Vue 的 computed 属性用于声明依赖于其他数据的计算属性。当依赖的数据变化时,计算属性会自动重新计算并缓存结果。 export defaul…

vue实现逻辑

vue实现逻辑

Vue 实现逻辑的核心概念 Vue.js 是一个渐进式 JavaScript 框架,其核心逻辑围绕数据驱动和组件化开发。通过响应式系统、虚拟 DOM 和组件生命周期等机制,Vue 实现了高效的前端开发…

vue实现签章

vue实现签章

Vue 实现签章功能 签章功能通常包括手写签名、电子印章等。以下是基于 Vue 的实现方法: 使用 canvas 实现手写签名 安装依赖(如需要): npm install signature…