使用axios-auth-refresh时并发请求无法暂停的问题排查
关于axios-auth-refresh库并发请求时未暂停后续请求的疑问
我希望实现这样的逻辑:当请求返回401状态码时,通过axios调用刷新token接口,在此期间暂停其余请求,待token刷新完成后重新发起这些请求。为此我使用了axios-auth-refresh库,感谢Flyrell开发该工具。
相关代码如下:
1. Axios实例创建
export const HTTP = axios.create({ baseURL: 'http://localhost:8088/api', headers: { "Content-Type": "application/json", }, params: { "connectionId": null } //headers: authHeader() });
2. 库配置与拦截器设置
const refreshAuthLogic = async (failed) => { const tokenRefreshResponse = await HTTP.post('/auth/refresh', { refreshToken: authStore.refreshToken }) console.log("failed", failed); if (tokenRefreshResponse?.data?.accessToken) { console.log("Refresh successful") authStore.accessToken = tokenRefreshResponse.data.accessToken authStore.refreshToken = tokenRefreshResponse.data.refreshToken return Promise.resolve(); } return Promise.reject(); } // 实例化拦截器 createAuthRefreshInterceptor(HTTP, refreshAuthLogic, { statusCodes: [401] // 默认值即为[401] }); HTTP.interceptors.request.use( async (config) => { const date = new Date(); console.log(`${date.toISOString()} - Calling URL: `, config.url); const token = await authStore.accessToken if (token && !config.url.includes("/auth/refresh")) { config.params["connectionId"] = authStore.connectionId config.headers["Authorization"] = 'Bearer ' + token; // 适配Spring Boot后端 } return config }, (error) => { return Promise.reject(error); } );
3. 组件中的并发请求代码
try { const response1 = flowService.getFlows(); const response2 = projectService.getProjectsTreeSelect(); const [data1, data2] = await Promise.all([response1, response2]) flows.value = data1 console.log("flows", flows.value) console.log("first request") projectsTree.value = data2 console.log("projectsTree", projectsTree.value) console.log("second request") projects.value = projectsTree.value.map(p => ({ projectName: p.label, projectCode: p.data })); } catch (error) { console.log("error", error) }
问题:
我预期当某个请求返回401时,后续的并发请求会在token刷新过程中暂停,待刷新完成后再执行,但实际控制台日志显示:所有请求都被触发,且都返回401后才触发一次刷新操作。
控制台日志存在两种情况:
- 所有请求失败,但token刷新成功
- 所有请求失败,且token刷新也失败
想请教这是axios-auth-refresh库的预期行为,还是我的配置存在问题?我期望该库能在刷新token期间暂停其余请求。
内容的提问来源于stack exchange,提问作者xenitis
相关产品推荐
相关产品推荐

