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日

相关文章

  • uniapp小程序之配置首页搜索框功能的实现

    下面我来分享一下“uniapp小程序之配置首页搜索框功能的实现”的攻略。 一、前置条件 在开始配置首页搜索框功能前,需要保证以下两点: 你已经正确创建了uniapp小程序项目,并且已经初始化了uni-app基础项目 你已经在pages文件夹中创建了需要展示搜索框的页面 二、实现步骤 1. 配置顶部导航栏 在需要展示搜索框的页面,打开对应的vue文件,找到顶部…

    Vue 2023年5月28日
    00
  • VUE响应式原理的实现详解

    VUE响应式原理的实现详解 介绍 VUE是一个MVVM模式的渐进式框架,其中响应式是VUE的核心特性之一,使得数据与界面保持同步,大大提高了开发效率。本文将阐述VUE响应式原理的实现,帮助读者更加深入理解VUE框架。 数据劫持 VUE的响应式实现依赖于ES5的get和set方法。在一个对象被创建时,遍历对象上的所有属性,将其转化为getter/setter,…

    Vue 2023年5月27日
    00
  • Vue中的computed属性详解

    接下来就为大家讲解一下Vue中的computed属性详解。 什么是computed属性 在Vue中,有一个计算属性computed,它是一个在模板中具有缓存特性的属性,当依赖的响应式数据发生变化时,会重新计算。 computed属性一般用于计算和过滤数据,在模板中使用computed属性,可以让代码更加清晰简洁。 如何声明computed属性 在Vue中声明…

    Vue 2023年5月28日
    00
  • vue中的el-form表单rule校验问题(特殊字符、中文、数字等)

    我来详细讲解一下Vue中的el-form表单rule校验问题。 1. 概述 在Vue的el-form表单中,通过设置rules属性可以对表单进行校验,并在提交时提示错误信息。但是在实际开发中,我们可能会遇到特殊字符、中文、数字等问题,这时我们就需要对规则进行特殊处理。 2. 校验规则详解 在Vue的el-form表单中,校验规则可以通过rules属性进行设置…

    Vue 2023年5月27日
    00
  • vue中jsonp的使用方法

    当前主流的前端框架之一就是Vue.js。在使用Vue.js时,有时我们需要使用JSONP(JSON with Padding)来解决跨域请求的问题。以下是关于Vue中JSONP的使用方法的完整攻略。 什么是JSONP? JSONP是一种跨域的请求方式。它通过动态添加<script>标签来实现跨域请求数据的方法。JSONP的实现过程如下: 在客户端…

    Vue 2023年5月28日
    00
  • 微信小程序MUI侧滑导航菜单示例(Popup弹出式,左侧不动,右侧滑动)

    微信小程序MUI侧滑导航菜单示例 微信小程序中,实现侧滑导航菜单是一个常见的需求。常见的导航菜单可以分为三种:弹出式(Popup)、覆盖式(Overlay)和抽屉式(Drawer)。对于简单的需求,我们可以使用MUI框架中提供的侧滑组件来实现。下面我们详细介绍如何使用MUI实现弹出式的导航菜单。 使用MUI实现侧滑导航菜单 首先需要在小程序的app.json…

    Vue 2023年5月27日
    00
  • Vue3插槽Slot实现原理详解

    下面我将为你详细讲解“Vue3插槽Slot实现原理详解”的完整攻略。 什么是插槽(Slot) 在Vue开发中,有时候我们需要在父组件中定义子组件的模板结构,但是子组件的内容是不确定的。这种情况下,我们可以使用插槽(Slot)来解决问题。 插槽允许我们定义一个承载子组件内容的挂载点,然后在子组件中使用具名插槽(Named Slot)或默认插槽(Default …

    Vue 2023年5月28日
    00
  • 一步步教你利用webpack如何搭一个vue脚手架(超详细讲解和注释)

    一步步教你利用Webpack如何搭一个Vue脚手架 本文将指导你如何使用Webpack搭建一个Vue脚手架,我们将一步步地进行详细地讲解,让你可以轻松地实现一个基本的Vue项目。 创建项目目录 首先,我们需要创建一个新的项目目录,并在其中创建一个package.json文件,以便我们可以安装所需的依赖项: mkdir vue-starter cd vue-s…

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