Добавьте JWT Refrech Token в React - PullRequest
0 голосов
/ 04 февраля 2020

Итак, у меня есть Backend с ASP net core 3.0 с токеном Jwt, и я реализовал токен refre sh в Api, поэтому у меня проблема с Ax ios и метод refre sh token, поэтому У меня есть много проверочных кодов, которые приходят из Backend, а также я хочу реализовать токен refre sh с перехватчиком Ax ios, но это не сработало вообще, поэтому я надеюсь, что кто-то подскажет, мне удалось чтобы заставить его работать, но он не повторяет первоначальный запрос в первый раз, я должен обновить sh страницу, чтобы он заработал. это подсказка в моем коде Axe ios.

 axios.interceptors.request.use(
  config => {
    const token = getJwt();
    if (token) {
      config.headers["Authorization"] = "Bearer " + token;
    }
    // config.headers['Content-Type'] = 'application/json';
    return config;
  },
  error => {
    Promise.reject(error);
  }
);
  const originalRequest = error.config;
  console.log("this is orginal request ", originalRequest);
  const expectedError =
    error.response &&
    error.response.status >= 400 &&
    error.response.status < 500; if (!expectedError) {
    logger.log(error.response);
    toast.error("An unexpected error occurrred.");
    return Promise.reject(error);
  } if (
    error.response.status === 401 &&
    originalRequest.url === refreshTokenUrl
  ) {
    console.log("not refreeeeeehhhhh  here error 401 with referech url ");
    CleanJwt();
    window.location = "/login";
    return Promise.reject(error);
  }

  if (error.response.status == 401 && !originalRequest._retry) {


    let tokenRefresh = {
      token: getJwt(),
      refreshToken: getRefreshToken()
    };

    await axios.post(refreshTokenUrl, tokenRefresh).then(response => {
      console.log(response);
      if (response.status === 200) {
        originalRequest._retry = true;

        localStorage.setItem("token", response.data.token);
        localStorage.setItem("refreshToken", response.data.refreshToken);
        originalRequest.headers.Authorization = "Bearer " + response.data.token;
        return axios(originalRequest);
      }
    });

    return Promise.resolve();
  }
  if (
    error.response.status == 400 &&
    error.response.data == "UserName Or Password Not Correct"
  ) {
    alert(error.response.data);
    console.log("alert false login ");
    logger.log(error.response);
  } else {
    if (error.response.status == 400) {
      let message = "Validation Exception , fill the Form with correct inputs ";
      logger.log(error.response);
      toast.error(message);
    }
  }
  if (error.response.status == 404) {
    let message = "  Not Found ";
    logger.log(error.response);
    toast.error(message);
    return Promise.reject(error);
  }
  if (error.response.status == 406) {
    let message = " User Identity Error ";

    logger.log(error.response);
    toast.error(message);
  }

  return Promise.reject(error);
});

...