iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >vue中Axios如何添加拦截器刷新token
  • 295
分享到

vue中Axios如何添加拦截器刷新token

2023-06-29 04:06:51 295人浏览 独家记忆
摘要

这篇文章将为大家详细讲解有关Vue中AxiOS如何添加拦截器刷新token,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。Axios是一款网络前端请求框架,基本用法如下:1. Axios基本用法: 

这篇文章将为大家详细讲解有关Vue中AxiOS如何添加拦截器刷新token,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

Axios是一款网络前端请求框架,基本用法如下:

1. Axios基本用法:

        const response = await Axios.create({            baseURL: "https://test.api.com",            headers: {                'Content-Type': 'application/JSON',            },          }).post<RequestResponse>('/signin', {            user_id: "test_user",            passWord: "xxx",        });

其中,RequestResponse是返回的数据要解析为的数据类型,如下:

export interface RequestResponse {    data: any;    message: string;    resultCode: number;}

这样,得到的response就是网络请求的结果,可以进行判断处理。

2. Axios基本封装用法:

对Axios进行简单的封装,使得多个网络请求可以使用统一的header等配置。

新建一个工具类,进行封装:

import Axios, { AxiosRequestConfig, AxiosError, AxiosInstance, AxiosResponse } from 'axios'; export const BASE_URL = "Https://test.api.com"; export const axiosApi = (): AxiosInstance => {  const instance = Axios.create({    baseURL: BASE_URL,    headers: {       'Content-Type': 'application/json',       Authorization: `${getAccessToken()}`,    },  });      return instance;} const getAccessToken = () => {    // 这里获取本地保存的token    return xxxxx}

然后使用的地方是这样:

const response = await axiosApi().post<RequestResponse>('/signin', {     user_id: "test_user",     password: "xxx",});

3. 添加拦截器的用法

现在我们想再增加个功能,就是调接口时,header里传了token,但是有时候token过期了接口就会返回失败,我们想在封装的地方添加统一处理,如果token过期就刷新token,然后再调接口。

其中token的数据格式及解析方法已知如下:

import * as crypto from 'crypto';import * as Jwt from "jsonWEBtoken"; export interface TokenData {  userid: string;  exp: number;  iat: number;} export const decodeJWT = function (token: string): TokenData {  if (!token) {    return null;  }  const decoded = jwt.decode(token, { complete: true });  return decoded?.payload;};

如何统一刷新token呢?可以添加拦截器进行处理。把对Axios的封装再改下,添加拦截器:

export const axiosApi = (): AxiosInstance => {  const instance = Axios.create({    baseURL: BASE_URL,    headers: {       'Content-Type': 'application/json',       Authorization: `${getAccessToken()}`,    },  });    // 添加拦截器  instance.interceptors.request.use(    config => {      return refreshToken(config);    },    err => {      return Promise.reject(err)    }  )  return instance;} // 刷新token的方法const refreshToken = async (config: AxiosRequestConfig) => {  const oldToken = getAccessToken();  if (!oldToken) { //如果本地没有token,也就是没登录,那就不用刷新token    return config;  }   const tokenData = decodeJWT(oldToken);//解析token,得到token里包含的过期时间信息  const currentTimeSeconds = new Date().getTime()/1000;   if (tokenData && tokenData.exp > currentTimeSeconds) {    return config; // token数据里的时间比当前时间大,也就是没到过期时间,那也不用刷新  }   // 下面是刷新token的逻辑,这里是调API获取新的token  const response = await signInRefreshToken(tokenData?.userid);  if (response && response.status == 200) {    const { token, refresh_token } = response.data?.data;    // 保存刷新后的token    storeAccessToken(token);    // 给API的header设置新的token    config.headers.Authorization = token;  }  return config;}

经过这样添加了拦截器,如果token没过期,就直接进行网络请求;如果token过期了,那就会调接口刷新token,然后给header设置新的token再进行网络请求。

4. 注意事项:

要注意的一点是,实际应用时,要注意:

刷新token时如果调接口,所使用的网络请求工具不能也使用这个封装的工具,否则就会陷入无限循环,可以使用简单未封装的方式请求。

本例使用的方法,是进行请求前刷新token。也可以使用先调网络请求,如果接口返回错误码表示token过期,则刷新token,再重新请求的方式。

关于“vue中Axios如何添加拦截器刷新token”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。

--结束END--

本文标题: vue中Axios如何添加拦截器刷新token

本文链接: https://www.lsjlt.com/news/322603.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • vue中Axios如何添加拦截器刷新token
    这篇文章将为大家详细讲解有关vue中Axios如何添加拦截器刷新token,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。Axios是一款网络前端请求框架,基本用法如下:1. Axios基本用法: ...
    99+
    2023-06-29
  • vue中Axios添加拦截器刷新token的实现方法
    目录1. Axios基本用法:2. Axios基本封装用法:3. 添加拦截器的用法4. 注意事项:Axios是一款网络前端请求框架,基本用法如下: 1. Axios基本用法: ...
    99+
    2024-04-02
  • vue中axios拦截器token刷新机制的示例分析
    这篇文章主要为大家展示了“vue中axios拦截器token刷新机制的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“vue中axios拦截器token刷...
    99+
    2024-04-02
  • Vue如何添加请求拦截器
    小编给大家分享一下Vue如何添加请求拦截器,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!一、现象统一处理错误及配置请求信息二、解...
    99+
    2024-04-02
  • vue+axios如何实现登录拦截
    这篇文章给大家分享的是有关vue+axios如何实现登录拦截的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。该项目是利用了Github 提供的personal token作为登录t...
    99+
    2024-04-02
  • Vue在封装了Axios后手动刷新页面拦截器无效怎么办
    小编给大家分享一下Vue在封装了Axios后手动刷新页面拦截器无效怎么办,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!项目类型:...
    99+
    2024-04-02
  • Router如何添加路由拦截
    这篇“Router如何添加路由拦截”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Router如何添加路由拦截”文章吧。一、安...
    99+
    2023-07-05
  • vue中如何使用Vue.http.interceptors.push拦截器
    这期内容当中小编将会给大家带来有关vue中如何使用Vue.http.interceptors.push拦截器,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。import&n...
    99+
    2024-04-02
  • 在springboot项目中拦截器怎么添加
    这篇文章给大家介绍在springboot项目中拦截器怎么添加,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。构建一个spring boot项目。添加拦截器需要添加一个configuration@Configuration...
    99+
    2023-05-31
    springboot 目中 拦截器
  • 详解如何消除axios拦截中的if
    目录基本拦截设计轮子思考方向轮子骨架详细实现实践总结基本拦截 axios的响应错误拦截中,难免会对error.status做各种各样的if判断,又或者switch。为了防止枯燥乏味的...
    99+
    2024-04-02
  • Vue中拦截器对token过期处理的示例分析
    这篇文章将为大家详细讲解有关Vue中拦截器对token过期处理的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。最近在做的一个项目,需要每个http请求下 都要添加...
    99+
    2024-04-02
  • SpringBoot登录验证token拦截器如何实现
    这篇文章主要讲解了“SpringBoot登录验证token拦截器如何实现”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“SpringBoot登录验证token拦截器如何实现”吧!用户访问接口验...
    99+
    2023-07-02
  • 在springboot中如何给mybatis加拦截器
    目录1、实现Interceptor接口,并添加拦截注解 @Intercepts1.在mybatis中可被拦截的类型有四种(按照拦截顺序)2.各个参数的含义2、在配置文件中添加拦截器(...
    99+
    2024-04-02
  • Vue如何使用axios添加请求头
    这篇“Vue如何使用axios添加请求头”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Vue如何使用axios添加请求头”文...
    99+
    2023-06-30
  • vue拦截器如何实现统一token并兼容IE9验证功能
    小编给大家分享一下vue拦截器如何实现统一token并兼容IE9验证功能,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!项目中使用...
    99+
    2024-04-02
  • vue中怎么利用axios实现一个登录请求拦截器
    vue中怎么利用axios实现一个登录请求拦截器,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。1.安装配置axioscnpm install ...
    99+
    2024-04-02
  • vue中el-tree增加节点后如何重新刷新
    目录给el-tree增加节点后重新刷新el-tree全树刷新,节点刷新单节点刷新全树刷新给el-tree增加节点后重新刷新 1.树形组件 <el-tree v-if="op...
    99+
    2022-11-13
    vue中el-tree el-tree增加节点 el-tree重新刷新
  • Spring Boot如何利用拦截器加缓存完成接口防刷操作
    目录为什么需要接口防刷技术解析主要代码测试结果总结为什么需要接口防刷 为了减缓服务器压力,将服务器资源留待给有价值的请求,防止恶意访问,一般的程序都会有接口防刷设置,接下来介绍一种简...
    99+
    2024-04-02
  • vue-resource拦截器如何设置头信息
    这篇文章主要介绍vue-resource拦截器如何设置头信息,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!使用vue-resource,设置头信息:Vue.http.intercep...
    99+
    2024-04-02
  • 在SpringBoot中如何使用拦截器
    本篇文章为大家展示了在SpringBoot中如何使用拦截器,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。自定义自己的拦截类,拦截类需要继承HandlerInterceptor接口并实现这个接口的方法...
    99+
    2023-05-31
    springboot 拦截器
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作