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日

相关文章

  • 如何去除富文本中的html标签及vue、react、微信小程序中的过滤器

    下面我将为你分享如何去除富文本中的html标签及vue、react、微信小程序中的过滤器的攻略。 去除富文本中的html标签 方法一:使用正则表达式 在 JavaScript 中,我们可以使用正则表达式来去除富文本中的 html 标签。具体实现代码如下: function removeHTMLTag(str) { str = str.replace(/&lt…

    Vue 2023年5月27日
    00
  • 分享Vue组件传值的几种常用方式(二)

    请听我详细讲解“分享Vue组件传值的几种常用方式(二)”的完整攻略。 一、前言 在Vue组件传值的开发过程中,我们通常会遇到如下问题:如何在不同的组件之间传递数据?如何在父子组件之间通信?如何在没有父子关系的组件之间传递数据?这些问题都可以通过不同的方式来解决。在上一篇文章中,我们分享了“prop与$emit”这种传值方式。而今天,我们来分享“provide…

    Vue 2023年5月27日
    00
  • vue-cli项目使用mock数据的方法(借助express)

    以下是详细讲解“vue-cli项目使用mock数据的方法(借助express)”的完整攻略。 前置知识 在讲解具体的实现方法之前,需要先了解一些前置知识: vue-cli:Vue.js 的官方脚手架,可用于快速搭建 Vue.js 项目 mock.js:一个用于生成随机数据的库,可生成各种类型的数据 express.js:一个用于搭建 web 服务器的库,可用…

    Vue 2023年5月28日
    00
  • vue3+ElementPlus使用lang=”ts”报Unexpected token错误的解决办法

    首先需要明确的是,vue3和ElementPlus均支持使用TypeScript语言进行开发,因此我们可以使用lang=”ts”来指定代码的语言类型。但是,如果在使用过程中出现了Unexpected token错误,需要进行以下的解决办法。 确认项目是否已经安装了必要的依赖 在使用TypeScript时,我们需要安装一些必要的依赖,例如ts-loader、t…

    Vue 2023年5月28日
    00
  • Vue向后端传数据后端接收为null问题及解决

    针对“Vue向后端传数据后端接收为null问题及解决”这个问题,这里提供一个完整攻略来解决此问题。 问题背景 在使用Vue进行开发时,需要向后端传递数据,但是在后端测试时,接收到的数据却是null,这个问题很常见,主要原因是后端未能正确解析前端的请求数据。在这种情况下,我们需要在Vue中进行一些设置,以确保后端可以正确识别和解析请求数据。 解决方案 方案一:…

    Vue 2023年5月27日
    00
  • vue多次循环操作示例

    下面是关于“vue多次循环操作示例”的完整攻略,我将分两个示例说明: 示例一:多层循环嵌套 在vue中,可以使用嵌套的v-for指令来进行多层循环嵌套。比如,我们有一个任务列表,每个任务列表下面又有多个子任务列表,现在要把这些任务列表都展示出来。可以使用以下代码实现: <div v-for="(task, index) in tasks&qu…

    Vue 2023年5月27日
    00
  • Vue-cli打包后如何本地查看的操作

    当你使用Vue-cli进行前端开发时,你可以在本地使用devServer插件启动一个本地服务器进行开发调试,但是在打包完成后,你可能需要查看打包后的文件在本地的运行效果。下面我来分享一下如何在本地查看Vue-cli打包后的文件。 1. 打包Vue-cli应用 首先,你需要使用Vue-cli将你的应用进行打包。你可以使用以下命令进行打包: npm run bu…

    Vue 2023年5月27日
    00
  • Vue中computed、methods与watch的区别总结

    Vue中computed、methods与watch的区别总结 在Vue中,computed、methods和watch是开发过程中常用的三个属性之一。它们都是Vue实例可以拥有的属性,但是它们的使用方式和作用有所不同。 Computed computed属性是一个函数,用于计算Vue实例中的一个值,这个值可以根据依赖于其他数据计算出来。computed属性…

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