Отправить только один запрос refre sh JWT - PullRequest
0 голосов
/ 10 февраля 2020

Я хотел бы сделать refre sh токен перед отправкой правильного запроса, но у меня проблема с тем, что мое приложение реагирования отправляет 2-5 запросов в 1 просмотре. Таким образом, я отправляю 2-5 запросов на обновление токена sh.

Как мне остановить все запросы, прежде чем я получу ответ от refre sh?

Мой код:

axios.interceptors.request.use(config => {
    const decoded = decodeJWT(window.localStorage.getItem("jwt"));

    if (decoded && Date.now() >= decoded.exp * 1000) {

      return axiosInstance
        .post("auth/jwt/refresh/", {
          refresh: window.localStorage.getItem("refresh")
        })
        .then(response => {
          window.localStorage.setItem("jwt", response.data.access);
          config.headers.Authorization = `JWT ${response.data.access}`;
          return config;
        })
        .catch(err => {
          window.localStorage.removeItem("jwt");
          return config;
        });
    } else {
      return config;
    }
  });

1 Ответ

0 голосов
/ 10 февраля 2020

Вам нужно использовать блокировку. Для браузера это сложно, потому что вам также нужно позаботиться о блокировке вкладок. Проверьте эту библиотеку, которую я написал для блокировки в браузере: https://www.npmjs.com/package/browser-tabs-lock

Если вы хотите узнать, как ее использовать, вы можете увидеть, как библиотека SuperTokens синхронизирует вызовы refre sh API: https://github.com/supertokens/supertokens-website/blob/master/handleSessionExp.ts (строки 18-55 находятся внутри блокировки).

Надеюсь, это поможет

...