使用redux-thunk捕获错误

时间:2018-05-15 13:33:36

标签: reactjs redux redux-thunk

我使用redux-thunk在我的React应用程序中进行API调用。

每30分钟,用户的持有者令牌过期,而不是强迫他们再次登录,我致电auth/refresh。这很痛苦,因为我每次拨打电话时都需要检查401 error。有没有办法使用redux / redux-thunk在一个地方检查这个错误,而不是每次调用?

我还有一个问题,即如果发生多次调用,每次都会调用相同的刷新,所以我最终会多次刷新持有者令牌!

我刷新身份验证令牌的行动:

export const refreshAuth = () => {
  return (dispatch, getState) => {
    return axios.post(API.path + 'auth/refresh/?' + API.beaconAPI_client, { 'refreshToken': getState().login.refreshToken })
    .then(response => {
        dispatch({
            type: DO_LOGIN_REFRESH,
            userDetails: response.data
        })
    })
}

}

使用Axios,如果发生错误,我会这样做:

.catch(error => {
  if(error.response.status === 401){
    this.props.refreshAuth()
    .then(response => {
        /* In the response, make the request again after auth is refreshed */
    })
  }
})

1 个答案:

答案 0 :(得分:0)

您可以使用Axios interceptors将这些处理程序放在一个位置。

axios.interceptors.response.use(null, error => {
  switch (error.response.status) {
    case 401:
    // [Unauthorized] - Wrong or no authentication ID/password provided
    store.dispatch(actionToRefreshToken());
    break;
  default:
    ...
}