Задать вопрос
DZHAMBULAT-SAMOUCHKA
@DZHAMBULAT-SAMOUCHKA
Frontend разработчик

Как проверять токен при каждом запросе в rtk query?

Привет! Возможно спрашиваю заезженную тему но ответа не нашел. У меня возникла проблема при обновлении access токена когда тот умирает с помощью refresh. У меня есть api созданный с помощью createApi rtk query. Как мне при каждом запросе для этого api проверять умер ли токен. Если да то я выполняю условный tokenUpdate() который останавливает запрос и выполняет логику, а если нет то все оставляю как есть и продолжаю выполнение запроса.
Насколько знаю это делается с помощью middleware но разобраться я так и не смог
  • Вопрос задан
  • 161 просмотр
Подписаться 1 Простой Комментировать
Помогут разобраться в теме Все курсы
  • Яндекс Практикум
    Мидл фронтенд-разработчик
    5 месяцев
    Далее
  • Яндекс Практикум
    React-разработчик
    3 месяца
    Далее
  • Яндекс Практикум
    Фронтенд-разработчик
    10 месяцев
    Далее
Решения вопроса 2
@karminski
Senior React.JS Developer
Не в том направлении думаете. Когда вы бросаете запрос с истекшим токеном, вам бек должен ответить, что токен истёк. Далее уже вы фронтом кидаете запрос на новый токен и повторяете первый запрос.

Проверять токен на фронте, это неверный шаг. Всё что прилетело на фронт, заведомо нельзя доверять.
Ответ написан
Комментировать
Aetae
@Aetae
Тлен
Ответ Антон Иванов - популярный костыль, но от того не менее ошибочный.
Токен имеет время жизни. Это время жизни можно достать на клиетне из самого токена.
Правильное решение - просто по таймеру за 5-15 минут до устаревания обновлять оный в фоне. В таком случае все нормальные запросы вообще не затронуты.
Чуть менее правильное - проверять на устаревание при каждом обращении к токену и если устарел прямо тут же, в процессе, получать новый.
Все популярные библиотеки умеют это из коробки.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
ITK academy Нижний Новгород
от 80 000 до 120 000 ₽
ITK academy Воронеж
от 50 000 до 90 000 ₽