Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Reactjs 如何在react redux中实现刷新令牌_Reactjs_Async Await_React Redux_Axios_Refresh Token - Fatal编程技术网

Reactjs 如何在react redux中实现刷新令牌

Reactjs 如何在react redux中实现刷新令牌,reactjs,async-await,react-redux,axios,refresh-token,Reactjs,Async Await,React Redux,Axios,Refresh Token,我所做的以下代码允许刷新访问令牌,当第一次请求响应返回未经授权的响应时,运行服务来刷新访问令牌。 代码运行良好,刷新令牌服务在Java制作的后端上运行。 代码不完整,只有对刷新令牌方法的调用。 下面显示了代码 const apiMiddleware = ({ dispatch }) => (next) => (action) => { const result = next(action); if (action.type !== API) { return r

我所做的以下代码允许刷新访问令牌,当第一次请求响应返回未经授权的响应时,运行服务来刷新访问令牌。 代码运行良好,刷新令牌服务在Java制作的后端上运行。 代码不完整,只有对刷新令牌方法的调用。 下面显示了代码

const apiMiddleware = ({ dispatch }) => (next) => (action) => {
  const result = next(action);
  if (action.type !== API) {
    return result;
  }
  const {
    url,
    method,
    data,
    onSuccess,
    types,
  } = action.payload;
  const axiosInstance = createAxios();

  const refreshToken = async(originalRequest) => {
    const axiosInstance = createAxios();
    const data = authUtil.getUserLoggedIn();
    const response = await axiosInstance({
      url: `${AUTH_ENDPOINT}/refresh-token`,
      method: 'PUT',
      data: { token: data.refreshToken },
    });
    if (response.status === 200) {
      authUtil.setUserLoggedIn(response.data);
      originalRequest.headers['Authorization'] = response.data.accessToken;
      axiosInstance(originalRequest)
        .then(({ data }) => {
          handlerSuccess({ data });
          return result;
        });
    } else {
      dispatch(apiError(types[1], response.error));
    }
  };
  const handlerSuccess = ({ data }) => {
    dispatch(onSuccess(data));    
  };
  axiosInstance({
    method,
    url,
    data,
  })
    .then(({ data }) => {
      handlerSuccess({ data });
      return result;
    })
    .catch((error) => {
      if (error.response && error.response.status === 403) {
        dispatch(accessDenied(types[2], window.location.pathname));
      } else if (error.response && error.response.status === 401) {
        refreshToken(error.config);
      }
      return result;
    })
};

export default apiMiddleware;
有人可以帮我改进这个代码