当前位置:首页 > 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 CLI 或通过 CDN 引入 Vue。若使用 Vue CLI,需安装 axios 或其他 HTTP 库用于后端通信。 注册表单组件 创建…

vue 实现在线预览

vue 实现在线预览

Vue 实现在线预览的常见方法 使用 iframe 嵌入 通过 iframe 标签可以嵌入多种类型的文件,如 PDF、图片、网页等。需要确保文件地址可访问。 <template> &…

vue状态管理怎么实现

vue状态管理怎么实现

Vue 状态管理实现方法 使用 Vuex(官方推荐) Vuex 是 Vue 的官方状态管理库,适合中大型应用。 安装 Vuex: npm install vuex --save 创建 Store 示…

vue实现关键词轮播

vue实现关键词轮播

Vue 实现关键词轮播 基础实现方案 使用 Vue 的 v-for 和 setInterval 实现基础轮播效果: <template> <div class="keyword…

vue实现用户信息删除

vue实现用户信息删除

Vue 实现用户信息删除功能 在 Vue 中实现用户信息删除功能通常涉及前端界面交互和后端 API 调用。以下是实现步骤: 前端界面设计 创建删除按钮或操作项,通常使用 @click 事件触发删除操…

vue全选实现

vue全选实现

Vue 全选实现方法 在 Vue 中实现全选功能通常涉及数据绑定和事件处理。以下是几种常见的实现方式: 基础实现方式 <template> <div> <…