成功的Axios拦截器

时间:2019-01-15 17:07:59

标签: javascript ajax promise axios interceptor

我有一个仪表板/应用程序系统,其中应用程序使用JWT来授权用户。 JWT有一个小时的TTL,在这种情况下,一旦最终找到401,我便拦截响应,使用刷新方法重新授权,然后重新提出原始请求。

通过以下代码,我可以很好地工作:

createAxiosResponseInterceptor() {
    this.axiosResponseInterceptor = window.axios.interceptors.response.use(
        response => {
            return response;
        },
        error => {

          if (error.config && error.response && error.response.status === 401) {
            window.axios.interceptors.response.eject(this.axiosResponseInterceptor);

            return window.axios.post('/auth/refresh')
            .then(
              (rsp) => {
                store.save('token', rsp.data.access_token).then(
                  () => {

                    global.token = rsp.data.access_token;
                    this.createAxiosResponseInterceptor();
                    error.config.headers.Authorization = "Bearer " + rsp.data.access_token;

                    return axios.request(error.config);
                  }
                );
              }
            )
            .catch(
              error => {
                console.error('DELETE TOKEN');
              }
            )
          }

          return Promise.reject(error);
        }
    );
  }

我的问题是发出请求的原始代码,如果成功,我将如何继续执行应该运行的代码?

在这种情况下,我的原始请求:

componentDidMount() {
  axios.get('/app/settings')
  .then(
    rsp => {
      // This is where I'm trying to get back to after request
      // has been intercepted.
      let s = rsp.data;

      store.save('user', s.user)
      .then(() => {
        this.props.navigation.goBack(false);
      })
    })
  .catch(
    err => {
      console.warn(err);
    }
  )
}

我已发出此请求,但失败了,我已进入.catch()函数,此请求已被拦截,并确认它为401。我已经刷新了令牌,重新发出了请求,并且收到了200,一切顺利。然后我该如何返回此.then()函数以使其继续执行应有的代码?

0 个答案:

没有答案