You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 03:25:05