Refre sh и поток токенов доступа в JWT - PullRequest
0 голосов
/ 06 августа 2020

Я разработал стандартную систему JWT, которая входит в систему и выдает токен доступа и токен refre sh. Срок действия токена доступа истекает через короткий промежуток времени, и есть способ обновить sh токен.

Я использую axios для выполнения запросов, но я не уверен, как поступать с просроченными токенами. Например, если я делаю запрос на /secret_route с моим токеном доступа, и он истек, нужно ли мне ждать 403, а затем делать запрос /refresh_token, а затем снова делать исходный запрос? Кажется беспорядочным с точки зрения программирования и довольно расточительным в сети. Есть ли эффективный / элегантный способ сделать это?

1 Ответ

0 голосов
/ 06 августа 2020

В итоге я нашел решение, которое, как мне кажется, более надежно, чем проверка отметки времени. Спасибо @Bergi, но меня беспокоят системные часы. Я использую перехватчики ax ios, чтобы обновить sh токен на 401

  // Request interceptor for API calls
  axios.interceptors.request.use(
    async config => {
      config.headers = { 
        'Authorization': `Bearer ${localStorage.getItem("accessToken")}`,
        'Accept': 'application/json',
      }
      return config;
    },
    error => {
      Promise.reject(error)
  });

  // Allow automatic updating of access token
  axios.interceptors.response.use(response => response, async (error) => {
    const originalRequest = error.config;
    if (error.response.status === 401 && !originalRequest._retry) {
      originalRequest._retry = true;
      const res = await axios.post('/users/token', { token: localStorage.getItem('refreshToken') });
      setToken(res.data.accessToken);

      return axios.request(originalRequest);
    }
    return Promise.reject(error);
  });

Адаптировано из https://thedutchlab.com/blog/using-axios-interceptors-for-refreshing-your-api-token

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...