Ловить ошибки, используя redux-thunk - PullRequest
0 голосов
/ 15 мая 2018

Я использую redux-thunk для выполнения вызовов API в моем приложении React.

Каждые 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 голосов
/ 15 мая 2018

Вы можете использовать перехватчики Axios , чтобы разместить эти обработчики в одном месте.

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:
    ...
}
...