Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Задачи

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

Назад
Вопрос про JavaScript: interceptor, refresh token, access token, axios, HTTP client

Как работает автоматический refresh токена через interceptor?

Вопрос проверяет понимание механизма автоматического обновления access токена с использованием перехватчиков (interceptors) в HTTP-клиентах, что необходимо для поддержания сессии пользователя без ручного вмешательства.

Короткий ответ

Interceptor перехватывает ответы сервера. Если получена ошибка 401 (Unauthorized), он автоматически отправляет запрос на обновление токена, используя refresh token. После успешного обновления новый access token сохраняется, и исходный запрос повторяется с новым токеном. Это позволяет избежать прерывания работы пользователя.

Длинный ответ

Как работает автоматический refresh токена через interceptor

Interceptor (перехватчик) — это функция, которая перехватывает HTTP-запросы или ответы до того, как они будут обработаны приложением. В контексте обновления токенов interceptor используется для автоматического обнаружения и обработки ошибок авторизации (обычно 401 Unauthorized). Когда сервер возвращает такую ошибку, interceptor не передает её сразу в приложение, а сначала пытается обновить access token с помощью refresh token.

Процесс работы

  • При каждом запросе interceptor добавляет текущий access token в заголовок Authorization.
  • Если сервер возвращает 401, interceptor перехватывает ответ и проверяет, не был ли уже отправлен запрос на обновление токена.
  • Если запрос на обновление ещё не отправлен, interceptor отправляет POST-запрос на специальный endpoint (например, /auth/refresh) с refresh token.
  • После успешного ответа новый access token сохраняется (например, в localStorage или памяти), и все ожидающие запросы повторяются с новым токеном.
  • Если обновление не удалось (например, refresh token истек), пользователь перенаправляется на страницу входа.

Пример кода на JavaScript с использованием Axios

import axios from 'axios';

const api = axios.create({ baseURL: 'https://api.example.com' });

let isRefreshing = false;
let failedQueue = [];

const processQueue = (error, token = null) => {
  failedQueue.forEach(prom => {
    if (error) prom.reject(error);
    else prom.resolve(token);
  });
  failedQueue = [];
};

api.interceptors.response.use(
  response => response,
  async error => {
    const originalRequest = error.config;
    if (error.response?.status === 401 && !originalRequest._retry) {
      if (isRefreshing) {
        return new Promise((resolve, reject) => {
          failedQueue.push({ resolve, reject });
        }).then(token => {
          originalRequest.headers['Authorization'] = 'Bearer ' + token;
          return api(originalRequest);
        });
      }
      originalRequest._retry = true;
      isRefreshing = true;
      try {
        const { data } = await axios.post('/auth/refresh', { refreshToken: localStorage.getItem('refreshToken') });
        const newToken = data.accessToken;
        localStorage.setItem('accessToken', newToken);
        processQueue(null, newToken);
        originalRequest.headers['Authorization'] = 'Bearer ' + newToken;
        return api(originalRequest);
      } catch (refreshError) {
        processQueue(refreshError, null);
        // Перенаправление на логин
        window.location.href = '/login';
        return Promise.reject(refreshError);
      } finally {
        isRefreshing = false;
      }
    }
    return Promise.reject(error);
  }
);

Вывод

Автоматический refresh токена через interceptor — это стандартный подход для поддержания сессии в SPA и мобильных приложениях. Он улучшает пользовательский опыт, скрывая процесс обновления токенов, и обеспечивает безопасность за счет использования короткоживущих access токенов и долгоживущих refresh токенов. Применяется в большинстве современных веб-приложений с JWT-аутентификацией.

Frontend developer

tech
tech
tech
tech
tech
tech
tech
tech
tech

Ментор по Frontend

Полное сопровождение до оффера — без дорогих курсов, с оплатой после трудоустройства

Записаться на консультацию

Уровень

  • Рейтинг:

    4

  • Сложность:

    6

Навыки

  • JavaScript

    JavaScript

  • Node.js

    Node.js

Ключевые слова

#interceptor

#refresh token

#access token

#axios

#HTTP client

Подпишись на React Developer в телеграм

Frontend developer

tech
tech
tech
tech
tech
tech
tech
tech
tech

Ментор по Frontend

Полное сопровождение до оффера — без дорогих курсов, с оплатой после трудоустройства

Записаться на консультацию