vue中Axios如何添加拦截器刷新token
发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,这篇文章将为大家详细讲解有关vue中Axios如何添加拦截器刷新token,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。Axios是一款网络前端请求框架,基本用法如
千家信息网最后更新 2026年11月03日vue中Axios如何添加拦截器刷新token
这篇文章将为大家详细讲解有关vue中Axios如何添加拦截器刷新token,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。
Axios是一款网络前端请求框架,基本用法如下:
1. Axios基本用法:
const response = await Axios.create({ baseURL: "https://test.api.com", headers: { 'Content-Type': 'application/json', }, }).post('/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('/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. 注意事项:
要注意的一点是,实际应用时,要注意:
1.刷新token时如果调接口,所使用的网络请求工具不能也使用这个封装的工具,否则就会陷入无限循环,可以使用简单未封装的方式请求。
2.本例使用的方法,是进行请求前刷新token。也可以使用先调网络请求,如果接口返回错误码表示token过期,则刷新token,再重新请求的方式。
关于"vue中Axios如何添加拦截器刷新token"这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。
拦截器
网络
封装
接口
数据
时间
工具
方法
篇文章
处理
统一
不用
也就是
地方
就是
方式
更多
不错
实用
事项
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
网络科技有限互联网
西安互联网科技
互联网与未来科技
奇士达互联网科技
齐家互联网科技有限公司
中正互联网科技招聘
佩信高科技互联网
互联网科技公司招聘
玖二柒互联网科技公司待遇
江苏南京365互联网科技
重庆互联网医院沙龙医盟信息科技
互联网新科技动漫ppt素材
迪庆互联网科技招生
晋城互联网科技
九思连强互联网电子科技有限公司
保山互联网科技靠谱吗
广西泛欧互联网科技有限公司
平安好医生打造互联网科技医疗
互联网高科技绘画
互联网 科技节活动 微视频大赛
互联网科技未来
上海喔噻互联网科技
现代互联网科技股
佳云科技和互联网广告
互联网科技革命什么开始
深圳市优智互联网科技有限公司
浙南科技城互联网大厦建设工程
互联网科技实习生岗位
上海乐五互联网科技有限公司
广州全民伙伴互联网科技有限公司