vue下axios拦截器token刷新机制的实例代码

yizhihongxing

下面我将为您讲解“Vue下Axios拦截器Token刷新机制的实例代码”的完整攻略,包括以下几个方面:

  1. 什么是拦截器

在使用axios发起请求时,我们可以使用拦截器对请求进行拦截、修改,以及对响应进行拦截、统一处理等操作。而在vue项目中,我们常使用axios拦截器实现Token的自动刷新机制。

  1. 实现Token的自动刷新机制

具体实现步骤如下:

(1) 在main.js文件中,引入axios和store,并将axios挂载到Vue原型上:

import axios from 'axios'
import store from './store'

// 设置axios为json格式
axios.defaults.headers.post['Content-Type'] = 'application/json'

// 将axios挂载到Vue原型上
Vue.prototype.$axios = axios

(2) 创建axios实例,并在其中设置请求拦截器和响应拦截器:

const instance = axios.create({
  // 基础url,将自动加在url前面,除非url是一个绝对url。
  baseURL: process.env.VUE_APP_BASE_API,
  // 设置超时时间
  timeout: 5000
})

// 请求拦截器:在每个请求前,如果存在token,则在请求头中携带token
instance.interceptors.request.use(
  config => {
    if (store.getters.token) {
      config.headers.common['Authorization'] = getToken()
    }
    return config
  },
  error => {
    return Promise.reject(error)
  }
)

// 响应拦截器:在每个响应收到后,判断是否token过期,如果过期则自动刷新token
instance.interceptors.response.use(
  response => {
    const res = response.data
    if (res.code === 50008 || res.code === 50012 || res.code === 50014) { // token过期或非法请求
      MessageBox.confirm('登录已过期,请重新登录', '提示', {
        confirmButtonText: '重新登录',
        cancelButtonText: '取消',
        type: 'warning'
      }).then(() => {
        store.dispatch('user/resetToken').then(() => {
          location.reload() // 为了重新实例化vue-router对象 避免bug
        })
      })
    }
    return res
  },
  error => {
    return Promise.reject(error)
  }
)

(3) 在Vuex中定义token相关的state和action:

const state = {
  token: getToken(),
  // ...
}

const mutations = {
  SET_TOKEN: (state, token) => {
    state.token = token
  },
  // ...
}

const actions = {
  login({ commit }, userInfo) {
    // ...
    commit('SET_TOKEN', token)
  },

  resetToken({ commit, state }) {
    return new Promise(resolve => {
      // ...
      commit('SET_TOKEN', '')
      resolve()
    })
  },
  // ...
}
  1. 示例说明

(1) 用户首次登录并成功获取Token后,将其存储到Vuex的state中:

axios.post('/user/login', {
  username: this.username,
  password: this.password
}).then(response => {
  const { data } = response
  // 保存token到vuex中
  this.$store.commit('SET_TOKEN', data.token)
})

(2) 用户已登录,再次发起请求时,axios将自动携带Token请求头:

this.$axios({
  url: '/user/info',
  method: 'post',
  data: { /* 请求参数 */ }
}).then(response => {
  const { data } = response
  // 处理响应数据
}).catch(error => {
  console.log(error)
})
  1. 总结

以上就是关于“Vue下Axios拦截器Token刷新机制的实例代码”的攻略,通过使用拦截器实现Token自动刷新机制,可以有效提高开发效率和用户体验。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:vue下axios拦截器token刷新机制的实例代码 - Python技术站

(0)
上一篇 2023年5月28日
下一篇 2023年5月28日

相关文章

  • Vue3中使用pnpm搭建monorepo开发环境

    首先,需要明确的是,Monorepo是指在一个版本控制仓库中管理多个模块(Packages)的开发方式。而pnpm是一种Node.js的包管理工具,与npm和yarn类似,但是相比之下,pnpm具有更快的速度和更节省的磁盘空间。 在Vue3中使用pnpm搭建Monorepo开发环境,主要分为以下几个步骤: 步骤一:安装pnpm 要使用pnpm,首先需要在本地…

    Vue 2023年5月28日
    00
  • 聊聊vue 中的v-on参数问题

    文本框架: 聊聊Vue中的v-on参数问题 什么是v-on v-on语法 不带参数的v-on 带参数的v-on v-on参数示例 示例一:点击按钮弹出提示框 示例二:在输入框中输入文字被实时监听 v-on综合示例 点击按钮改变背景色并弹出提示 总结 什么是v-on v-on 是 Vue 中的指令,用于监听 DOM 事件并触发Vue中指定的方法。在 Vue 中…

    Vue 2023年5月27日
    00
  • 一文详解Vue 的双端 diff 算法

    一文详解Vue 的双端 diff 算法 什么是双端 diff 算法 双端 diff 算法是 Vue 框架中用于虚拟 DOM 更新的一个核心算法。与传统 diff 算法不同,双端 diff 算法在新的修改和比较过程中存在两个方向,从开头到结尾(前向)和从结尾到开头(后向),所以称为双端(Two-Way)算法。 双端 diff 算法的原理 Vue 双端 diff…

    Vue 2023年5月29日
    00
  • vue项目首次打开时加载速度很慢的优化过程

    当我们在使用Vue构建一个应用时,有时候我们会发现应用在首次打开时加载速度很慢,影响用户的使用体验。这种情况通常是由于以下原因导致的: 应用程序的代码打包较大 应用程序中网络请求过多 针对这些问题,我们可以采取以下的优化策略来缩短首次加载时间,并提高应用程序的性能: 1. 开启gzip进行压缩 gzip是一种压缩文件格式,通过gzip可以压缩网页响应达到更快…

    Vue 2023年5月27日
    00
  • Vue开发工具之vuejs-devtools安装教程及常见问题解决(最详细)

    下面我会详细讲解vuejs-devtools的安装教程及常见问题解决。 什么是Vue.js-devtools Vue.js-devtools是一款为Vue开发者提供的浏览器插件工具,安装后可以帮助开发者调试Vue应用程序并快速定位问题。它可以让你追踪你的Vue实例并且检查组件层次结构、轻松调试样式和查看组件props、data的值等。 安装Vue.js-de…

    Vue 2023年5月27日
    00
  • 基于Vue 2.0的模块化前端 UI 组件库小结

    我给您讲解一下关于“基于Vue 2.0的模块化前端 UI 组件库小结”的完整攻略。 什么是Vue 2.0的模块化前端 UI 组件库 Vue 2.0的模块化前端 UI 组件库是一种基于Vue.js 2.0的前端框架,用于构建和管理UI组件库。这种框架将UI组件库分解成多个小型、可重用、独立的部件,每个部件都有自己的样式和功能。通过使用这些组件,您可以创建一系列…

    Vue 2023年5月27日
    00
  • 利用vite创建vue3项目的全过程及一个小BUG详解

    下面我将详细讲解如何利用 Vite 创建 Vue 3 项目的全过程,并对遇到的一个小 BUG 进行详解。 1. 安装 Vite 首先,我们需要全局安装 Vite: npm install -g vite 2. 创建项目 创建一个基于 Vue 3 的项目可以使用 Vue CLI 4.x 或者使用 Vite + Vue 3。这里我们使用 Vite + Vue 3…

    Vue 2023年5月27日
    00
  • vue2组件进阶与插槽详解(推荐!)

    Vue2组件进阶与插槽详解 本篇攻略主要介绍Vue2组件的一些进阶用法,重点讲解Vue2插槽的使用。 组件进阶 动态和异步组件 在实际应用中,有些组件只有在需要的时候才会被加载。Vue2提供两种方式达到这种效果:动态组件和异步组件。 动态组件 动态组件可以通过<component>标签来实现,需要指定is属性,该属性值对应动态组件加载的名称: &…

    Vue 2023年5月28日
    00
合作推广
合作推广
分享本页
返回顶部