如何在axios拦截器中重定向?

时间:2019-10-16 07:08:25

标签: javascript vue.js axios

我在vue js(main.js)中为刷新令牌编写了axios interceptor,我想当我在项目中收到401错误状态代码时,尝试使用refresh_token获取新令牌并发送使用新令牌再次请求 如果刷新令牌也是无效的,我也想重定向到登录页面并中断axios请求 但是我的问题是,当刷新令牌无效时,我将陷入刷新令牌api调用的循环,并且我将在控制台中收到多个错误(duplicate navigation) 另一个问题是我无法捕捉到catch block中的错误,并且总是到then block并且响应为undefined

axios.interceptors.response.use((response) => {
        return response
    },
    function (error) {
        const originalRequest = error.config;
        if (error.response.status === 401) {
            axios.post(process.env.VUE_APP_BASE_URL + process.env.VUE_APP_REFRESH_TOKEN,
                {
                    "refresh_token": localStorage.getItem("refresh_token")
                })
                .then(res => {
                        localStorage.setItem("token", "Bearer " + res.data.result.access_token);
                        originalRequest.headers['Authorization'] = localStorage.getItem("token");
                        return axios(originalRequest);
                }).catch(error=>{
                    console.log(error);
                    router.push({'name':'login'})
            })
        }
    });

1 个答案:

答案 0 :(得分:0)

您可以尝试添加标志。例如,

keyfarmercas = append(keyfarmercas, pcdcorder.ParentInfo.PCOrderID)