Vue3+Vite使用双token实现无感刷新

下面我将详细讲解“Vue3+Vite使用双token实现无感刷新”的完整攻略。

什么是双token实现无感刷新?

双token是指前后端各自维护一个token,前端在请求后端接口时需要在请求头中携带两个token,一个是用户信息token,另一个是操作token,后端通过判断这两个token的有效性,来决定是否需要重新登录,从而达到无感知的更新token的目的。

Vue3+Vite项目中使用双token实现无感刷新的步骤

以下是使用Vue3+Vite项目中使用双token实现无感刷新的详细步骤:

第一步:在Vite项目中安装axios

由于我们需要使用axios来进行网络请求,因此我们需要安装axios。

npm install axios --save

第二步:创建service.js文件

我们需要创建一个js文件,用于封装axios的请求。

import axios from 'axios';

const service = axios.create({
    baseURL: '/api', // 接口的根路径
    timeout: 10000, // 超时时间
    headers: {
        'Content-Type': 'application/json;charset=UTF-8',
    }
});

export default service;

第三步:实现请求拦截器和响应拦截器

由于我们需要在请求头中添加两个token,因此我们需要在请求拦截器中添加逻辑。

import service from '@/utils/request';
import { getToken, getRefreshToken } from '@/utils/auth';

service.interceptors.request.use(
  config => {
    config.headers['Authorization'] = getToken();
    config.headers['Refresh-Token'] = getRefreshToken();
    return config;
  },
  error => {
    Promise.reject(error);
  }
);

第四步:实现token刷新的逻辑

当前端的操作token过期时,需要重新获取新的token。因此我们需要在请求失败的时候,判断是否需要刷新操作token。

import service from '@/utils/request';
import { getToken, getRefreshToken, setToken } from '@/utils/auth';

service.interceptors.response.use(
  response => {
    const res = response.data;
    if (res.code !== 20000) {
      if (res.code === 40001) {
        return refreshToken(response);
      } else {
        return Promise.reject('error');
      }
    } else {
      return res;
    }
  },
  error => {
    if (error.response.status === 401) {
      return refreshToken(error.response);
    } else {
      return Promise.reject(error);
    }
  }
);

const refreshToken = async (response) => {
  const newTokenRes = await service.post('/auth/refresh', { refreshToken: getRefreshToken() });
  if (newTokenRes.code === 20000) {
    setToken(newTokenRes.result.token);
    response.config.headers['Authorization'] = getToken();
    return service(response.config);
  }
};

以上就是使用双token实现无感刷新的完整步骤。

示例说明

示例一

我们可以在应用程序的登录页面中发送一个POST请求,来处理用户的身份验证。

import service from '@/utils/request';

export const login = (username, password) => {
  return service.post('/auth/login', {
    username,
    password
  });
}

示例二

我们可以在应用程序的任何地方发送一个GET请求来获取用户信息。

import service from '@/utils/request';

export const getUserInfo = () => {
  return service.get('/user/info');
}

以上两个示例展示了,在Vue3+Vite项目中如何使用双token实现无感刷新。其中请求拦截器、响应拦截器和token刷新的逻辑,都是可以复用的。根据实际业务需求,可以在此基础上进行修改,实现更复杂的功能。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Vue3+Vite使用双token实现无感刷新 - Python技术站

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

相关文章

  • vue watch关于对象内的属性监听

    Vue.js 是一款轻量级的MVVM框架,提供了非常方便的API用于响应用户操作,其中watch就是其中非常重要的一部分,用于实现数据的监听,从而对数据的变化做出响应。 当需要监听对象内部属性时,可以使用深度监听,即使用deep:true选项,Vue会递归地监听对象以及对象内的所有属性变化。下面提供两个示例说明。 示例1 在模板中有一个输入框和一个按钮,当按…

    Vue 2023年5月28日
    00
  • 浅谈Vue.nextTick 的实现方法

    当数据发生变化后,Vue 不会立即更新 DOM,而是加入一个更新队列,并在下一次事件循环中更新视图。而 Vue.nextTick 可以在下次 DOM 更新循环结束之后执行回调。这使得我们可以在 DOM 变化后立即操作更新后的 DOM,例如获取更新后的元素宽高等。 一、Vue.nextTick 的调用方式 Vue 提供了两种调用方式: 1.1 全局调用方式 V…

    Vue 2023年5月29日
    00
  • vue+ESLint 配置保存 自动格式化代码

    这里为您详细讲解基于vue和ESLint开发的代码格式化和保存配置攻略,并提供两个使用示例。 1. 安装插件和配置ESLint 首先,我们需要在项目中安装vue-cli-plugin-eslint插件,可以使用如下命令进行安装: vue add eslint 接下来,在项目根目录中的.eslintrc.js文件中配置ESLint的规则,比如我们可以使用标准的…

    Vue 2023年5月27日
    00
  • Vue element el-table-column中对日期进行格式化方式(全局过滤器)

    针对Vue element el-table-column中对日期进行格式化方式,可以通过全局过滤器来实现,以下是具体步骤。 步骤一:创建全局过滤器 在Vue项目的main.js文件中,定义一个全局过滤器来格式化日期,代码如下: import Vue from ‘vue’; import moment from ‘moment’; Vue.filter(‘f…

    Vue 2023年5月29日
    00
  • Vue CLI3基础学习之pages构建多页应用

    下面是关于“Vue CLI3基础学习之pages构建多页应用”的攻略,包含以下内容: 1. 什么是Vue CLI3的pages构建多页应用? Vue CLI3支持构建多页应用,即可以使用单个Vue CLI3项目同时构建多个HTML页面。每个页面都可以有自己的脚本和样式文件。 2. 如何在Vue CLI3中创建多页应用? 首先,我们需要在Vue CLI3项目使…

    Vue 2023年5月27日
    00
  • 理解Vue2.x和Vue3.x自定义指令用法及钩子函数原理

    下面详细讲解“理解Vue2.x和Vue3.x自定义指令用法及钩子函数原理”的完整攻略。自定义指令是Vue框架中提供的一种高级功能,可以用于改变DOM元素的行为,例如为元素添加过渡效果、鼠标经过时高亮等。vue2.x和vue3.x中自定义指令的实现方式有所不同,下面分别介绍。 Vue2.x自定义指令 自定义指令定义方法 在Vue2.x中,我们可以使用Vue.d…

    Vue 2023年5月28日
    00
  • vue中异步函数async和await的用法说明

    下面就给您详细讲解下“vue中异步函数async和await的用法说明”的完整攻略。 1.什么是异步函数 在Vue中,经常会使用异步函数来处理异步操作,比如通过Ajax获取远程的数据、读取本地数据库等等。异步函数是一种特殊的函数,可以使函数的执行不阻塞主线程,并且可以在异步操作完成后通过回调函数来处理结果。在Vue中,异步函数通常使用Promise或asyn…

    Vue 2023年5月28日
    00
  • 解决vue props传Array/Object类型值,子组件报错的情况

    解决 Vue props 传 Array/Object 类型值,子组件报错的情况,可以通过以下几种方式来实现,具体步骤如下: 使用具体类型声明 Props 在声明组件的 props 时,可以使用具体类型来声明,例如: props: { data: Array // 声明 Array 类型的 data Prop } 这样可以确保子组件在接收到 props 时,…

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