这个库通过axios的拦截器帮助你实现自动刷新授权。 你可以在原始请求失败时轻松拦截它,刷新授权并继续原始请求,无需任何用户交互。
当请求由于授权失败时会发生什么完全由你决定。 你可以运行刷新调用以获取新的授权令牌,或者运行自定义逻辑。
该插件会暂停等待新授权令牌期间收到的额外请求,并在新令牌可用时解决它们。
npm install axios-auth-refresh --save # 或 yarn add axios-auth-refresh
createAuthRefreshInterceptor( axios: AxiosInstance, refreshAuthLogic: (failedRequest: any) => Promise<any>, options: AxiosAuthRefreshOptions = {} ): number;
axios - Axios的一个实例refreshAuthLogic - 用于刷新授权的函数(必须返回一个promise)。
接受一个参数,即原始调用返回的failedRequest。options - 拦截器的设置对象(参见可用选项)拦截器的id,以便你可以手动拒绝它。
要激活拦截器,你需要从axios-auth-refresh导入一个_默认导出_的函数,
并用你想要拦截的axios实例以及刷新授权函数(你需要在其中编写刷新授权的逻辑)来调用它。
然后,拦截器将绑定到axios实例上,每当服务器返回401(未授权)状态码时 (或者你在选项中提供的任何其他状态码),指定的逻辑就会运行。在refreshAuthLogic处理期间创建的所有新请求 将绑定到refreshAuthLogic函数返回的Promise上。这意味着当获取到新的访问令牌或刷新逻辑失败时,这些请求将被解决。
import axios from 'axios'; import createAuthRefreshInterceptor from 'axios-auth-refresh'; // 将被调用以刷新授权的函数 const refreshAuthLogic = (failedRequest) => axios.post('https://www.example.com/auth/token/refresh').then((tokenRefreshResponse) => { localStorage.setItem('token', tokenRefreshResponse.data.token); failedRequest.response.config.headers['Authorization'] = 'Bearer ' + tokenRefreshResponse.data.token; return Promise.resolve(); }); // 实例化拦截器 createAuthRefreshInterceptor(axios, refreshAuthLogic); // 发起调用。如果返回401错误,将运行refreshAuthLogic, // 并使用新令牌重试请求 axios.get('https://www.example.com/restricted/area').then(/* ... */).catch(/* ... */);
:warning: 由于axios#2295错误,不支持v0.19.0版本。:warning:
:white_check_mark: 这个问题已在axios v0.19.1中修复
有可能跳过特定调用的拦截器逻辑。
要做到这一点,你需要为每个不想拦截的请求在请求配置中传递skipAuthRefresh选项。
axios.get('https://www.example.com/', { skipAuthRefresh: true });
如果你使用TypeScript,你可以从axios-auth-refresh导入自定义请求配置接口。
import { AxiosAuthRefreshRequestConfig } from 'axios-auth-refresh';
由于这个插件在刷新令牌时自动暂停额外的请求, 最好将你的请求逻辑包装在一个函数中, 以确保暂停的请求使用新获取的数据(如令牌)。
发送令牌的示例:
// 每次调用函数时获取新的令牌 function getAccessToken() { return localStorage.getItem('token'); } // 使用拦截器将令牌注入请求 axios.interceptors.request.use((request) => { request.headers['Authorization'] = `Bearer ${getAccessToken()}`; return request; });
你可以指定多个你想要拦截器运行的状态码。
{ statusCodes: [401, 403], // 默认值:[ 401 ] }
你可以指定多个你想要拦截器运行的状态码。
{ shouldRefresh: (error) => error?.response?.data?.business_error_code === 100385, }
你可以指定用于重试暂停请求的实例。
默认值为undefined,使用传递给createAuthRefreshInterceptor函数的实例。
{ retryInstance: someAxiosInstance, // 默认值:undefined }
onRetry回调你可以指定onRetry回调,它将在每个暂停请求被调用之前执行,
并带有请求配置对象。
{ onRetry: (requestConfig) => ({ ...requestConfig, baseURL: '' }), // 默认值:undefined }
当你的刷新逻辑正在运行时,拦截器将触发每个返回指定的options.statusCodes之一的请求
(默认为HTTP 401)。
为了防止拦截器循环(当你的刷新逻辑失败并返回options.statusCodes中指定的任何状态码时),
你需要在refreshAuthLogic函数内 的刷新调用中使用skipAuthRefresh标志。
如果你的刷新逻辑不进行任何调用,你应该考虑在初始化拦截器时使用以下标志 来在刷新挂起时暂停整个axios实例。这可以防止拦截器为每个失败的请求运行。
{ pauseInstanceWhileRefreshing: true, // 默认值:false }
某些CORS API在返回HTTP 401未授权响应时可能不会返回CORS响应头。 在这种情况 下,浏览器将无法读取响应头以确定响应状态码。
要拦截_任何_网络错误,启用interceptNetworkError选项。
注意:这应该作为最后的手段使用。如果这是用来解决不支持CORS的HTTP 401响应的API问题, 你的重试逻辑可以尝试刷新认证来测试网络连接。
{ interceptNetworkError: true, // 默认值:undefined }
这个库还被用于:
你还有其他用途吗?创建一个PR来分享你的用例。
v3.1.0
interceptNetworkError选项。参见#133。v3.0.0
skipWhileRefresh标志已被弃用,其逻辑已移至pauseInstanceWhileRefreshing标志pauseInstanceWhileRefreshing默认设置为false查看贡献指南或我的patreon页面!
<a href="https://www.jetbrains.com/?from=axios-auth-refresh" title="链接到JetBrains"><img src="https://upload.wikimedia.org/wikipedia/commons/thumb/1/1a/JetBrains_Logo_2016.svg/128px-JetBrains_Logo_2016.svg.png" alt="JetBrains"></a>


免费创建高清无水印Sora视频
Vora是一个免费创建高清无水印Sora视频的AI工具


最适合小白的AI自动化工作流平台
无需编码,轻松生成可复用、可变现的AI自动化工作流

大模型驱动的Excel数据处理工具
基于大模型交互的表格处理系统,允许用户通过对话方式完成数据整理和可视化分析。系统采用机器学习算法解析用户指令,自动执行排序、公式计算和数据透视等操作,支持多种文件格式导入导出。数据处理响应速度保持在0.8秒以内,支持超过100万行数据的即时分析。


AI辅助编程,代码自动修复
Trae是一种自适应的集成开发环境(IDE),通过自动化和多元协作改变开发流程。利用Trae,团队能够更快速、精确地编写和部署代码,从而提高编程效率和项目交付速度。Trae具备上下文感知和代码自动完成功能,是提升开发效率的理想工具。


AI论文写作指导平台
AIWritePaper论文写作是一站式AI论文写作辅助工具,简化了选题、文献检索至论文撰写的整个过程。通过简单设定,平台可快速生成高质量论文大纲和全文,配合图表、参考文献等一应俱全,同时提供开题报告和答辩PPT等增值服务,保障数据安全,有效提升写作效率和论文质量。


AI一键生成PPT,就用博思AIPPT!
博思AIPPT,新一代的AI生成PPT平台,支持智能生成PPT、AI美化PPT、文本&链接生成PPT、导入Word/PDF/Markdown文档生成PPT等,内置海量精美PPT模板,涵盖商务、教育、科技等不同风格,同时针对每个页面提供多种版式,一键自适应切换,完美适配各种办公场景。


AI赋能电商视觉革命,一站式智能商拍平台
潮际好麦深耕服装行业,是国内AI试衣效果最好的软件。使用先进AIGC能力为电商卖家批量提供优质的、低成本的商拍图。合作品牌有Shein、Lazada、安踏、百丽等65个国内外头部品牌,以及国内10万+淘宝、天猫、京东等主流平台的品牌商家,为卖家节省将近85%的出图成本,提升约3倍出图效率,让品牌能够快速上架。


企业专属的AI法律顾问
iTerms是法 大大集团旗下法律子品牌,基于最先进的大语言模型(LLM)、专业的法律知识库和强大的智能体架构,帮助企业扫清合规障碍,筑牢风控防线,成为您企业专属的AI法律顾问。


稳定高效的流量提升解决方案,助力品牌曝光
稳定高效的流量提升解决方案,助力品牌曝光


最新版Sora2模型免费使用,一键生成无水印视频
最新版Sora2模型免费使用,一键生成无水印视频
最新AI工具、AI资讯
独家AI资源、AI项目落地

微信扫一扫关注公众号