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

下面我将为您讲解“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日

相关文章

  • 详解Vue 2中的 initState 状态初始化

    下面就为您详解Vue 2中的initState状态初始化。 一、initState概述 在Vue应用程序的初始化过程中,首先会执行initState函数,该函数主要用于初始化组件的状态。该函数会将props, methods, data, computed, watch等属性放在vm实例上,并且调用initProps、initMethods、initData…

    Vue 2023年5月28日
    00
  • SpringBoot+VUE实现数据表格的实战

    我来详细讲解“SpringBoot+VUE实现数据表格的实战”的完整攻略。我们将分为以下几个步骤: 搭建前端项目 首先,我们需要在计算机上安装Node.js和Vue Cli脚手架工具。安装完成后,在终端中执行以下命令来创建一个新的Vue.js项目: vue create projectname 其中“projectname”是你的项目的名称。在创建过程中,你…

    Vue 2023年5月27日
    00
  • Vue组件间通信的实现方法讲解

    Vue组件间通信的实现方法讲解 在Vue开发中,组件之间的通信是非常重要的。本文将介绍Vue组件间通信的实现方法。 1. 父组件传递Props 父组件通过props属性将数据传递给子组件。子组件通过props对这些数据进行监听并使用。 假设有一个父组件Parent和一个子组件Child。在Parent中传递一个属性message给Child: <tem…

    Vue 2023年5月27日
    00
  • vue中展示、读取.md 文件的方法(批量引入、自定义代码块高亮样式)

    展示和读取 markdown 文件在 Vue 中是一个常见的需求,Vue 框架提供了一些库和插件来满足这种需求。以下是在 Vue 中展示、读取 markdown 文件的方法以及如何实现自定义代码块高亮样式的完整攻略: 读取 Markdown 文件 在 Vue 中读取 Markdown 文件可以使用 markdown-it 库。该库可以将 Markdown 文…

    Vue 2023年5月28日
    00
  • vue3.0+vue-router+element-plus初实践

    下面是 “Vue3.0 + Vue Router + Element Plus初实践” 的完整攻略: 1. 安装Vue3.0 可以在终端中使用以下命令安装Vue3.0: npm install vue@next 注意,”@next” 表示安装的是Vue3.0版本。 2. 安装Vue Router 可以在终端中使用以下命令安装Vue Router: npm i…

    Vue 2023年5月28日
    00
  • vue的图片需要用require的方式进行引入问题

    为了解释“Vue 的图片需要用 require 的方式进行引入问题”,首先需要对 Webpack 打包工具的处理方式进行简要说明。 Webpack 打包工具通过使用 ‘loader’(加载器)的引入不同类型的文件,包括图片、CSS文件等。其中图片文件处理经常出现的问题就是路径引入的方式。Webpack 打包工具提供了多种处理方式,其中包含使用require的…

    Vue 2023年5月27日
    00
  • vue.js指令v-for使用及索引获取

    我来给你详细讲解一下 “vue.js 指令 v-for 使用及索引获取” 的完整攻略。 一、vue.js 指令 v-for 的基本用法 在 Vue.js 中,可以使用 v-for 指令来遍历数据,它的基本语法如下: <div v-for="(item, index) in list"> {{ index }}. {{ item…

    Vue 2023年5月29日
    00
  • vue-cli脚手架初始化项目各个文件夹用途

    当使用Vue.js来开发项目时,可以使用Vue CLI脚手架工具来初始化项目。通过Vue CLI初始化的项目,会自动创建多个文件夹和文件,它们的用途如下: /public 文件夹:该文件夹下存放的是一些静态文件,如图标和页面。其中,/public/index.html 文件是整个应用的入口文件,是应用的模板。 /src 文件夹:该文件夹是主要的开发目录,包含…

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