169 похожих чатов

Всем привет! У меня есть баг по рефрешу токенов в

приложении.
В двух словах:
1) у меня на каждом запросе стоит проверка
if (response.statusCode == 401) {
final result = await HttpFunctions().refreshToken();
т.е. если 401 код, то вызвать функцию по рефрешу аксес токена.
2) в самой функции по рефрешу токена у меня стоит проверка
if(!isValidAccessToken(accessToken)) {
final response = await http.get(Uri.parse(Environments.current.baseUrl + _apiConstants.auth.refresh),
т.е. если токен невалидный, то отправляю запрос на рефреш токена.
3) если запрос рефреш токена вернул 401 код, то значит refreshToken истек, а значит надо разлогиниться и выйти на страницу сайнапа.
Запрос на рефреш возвращает 401ый код в двух случаях:
а) если рефреш токен реально истек (цикл жизни рефреш токена полгода)
б) если отправляешь запрос на рефреш с валидным акссе токеном.
Итак, сама проблема. У меня стоит подряд три запроса на бэк. В какой-то момент аксес токен истекает и все три запроса поочередно возвращаю 401 код (как в п.1) и переходят на функцию рефреша токена. Сначала 3 раза проходит проверка на валидность аксес токена (п.2), и три раза говорит, что он невалидный. Потом три раза подряд вызывается запрос на рефреш аксес токена. Очевидно, что первый срабатывает нормально, но два следующих присылают код 401, т.к. акссес токен уже был обновлен первым запросом (п.3). После чего пользователя разлогинивает.
Может кто-то мне может подсказать, как мне настроить асинхронность так, чтобы проверка на валдиность аксес токена (п.2) и его рефреша происходила поочередно, а не одновременно?

5 ответов

35 просмотров

Именно поэтому советуют юзать дио на случай перехвата протухшего аксесс токена и написать свой интерсептор

Maksim-Zdanchuk Автор вопроса
Maksim-Zdanchuk Автор вопроса
Ivan Galkin
Именно поэтому советуют юзать дио на случай перехв...

к сожалению, уже слишком поздно переписывать под дио, займет уйму времени

Maksim Zdanchuk
да, тут вопросов нет, там все четко)

Мне кажется в Вашем случае если только написать апи класс и сделать/переопредедить методы для http, где организовать проверку Тоже чуть дольше но хоть поправильней чтоль И проверить на синхронность запросов, если 401 будет - чтобы следующие ждали пока перезапрашиваются креды

Maksim-Zdanchuk Автор вопроса
Ivan Galkin
Мне кажется в Вашем случае если только написать ап...

вот примерно так же я сейчас и сделал, только, возможно, чуть более костыльнее

Похожие вопросы

Обсуждают сегодня

Всем привет! Имеется функция: function IsValidChar(ch: UTF8Char): Boolean; var i: Integer; ValidChars: AnsiString; begin ValidChars := 'abcdefghijklmnopqrstuvwxyzABCDE...
Евгений
44
Чтобы перехватить все нажимания буков на форме, надо хук ставить? Пробовал на форме ОнКейДаун, оно ловит клаву если фокус не на компоненте с вводом текста
Serjone
15
лучше скажите, причём тут паскаль?
Alexey Kulakov
36
Всем привет! вывожу на общей стр дочерние ресурсыв каждом ресурсе галерея, и первая фотка должна выводиться на общей [!DocLister? &prepare=photo !]
Alekso
12
А можно вопрос? Мне сегодня сказали что у меня функция (которая просто заполняет массив значениями) не правильная void Full(double * arr, int n) { for (int i = 0; i < n; i...
† C E †
7
День добрый, подскажите пожалуйста, есть ли какой-то способ сказать ребару не компилировать определённое приложение? Всю доку их перечиатл ничего подобного не нашёл
Кирилл
14
Добрый вечер. Хочу чтобы у меня в классе поле было функцией, которая возвращает строку. Делаю так: interface ... TGetOutPath = function : String of object; ... protec...
Kirill Filippenok
12
Народ! Впервые клиенту пришло письмо от РКН, у вас, дескать, есть яндекс метрика, а нигде не написано, что вы ее юзаете. Никто не сталкивался?
Sasha Beep
10
Это может быть все-таки не флудвейт? у меня ботфазер принимает изменения и отображает даже что они изменились, на видео видно что он прислал якобы уже измененное описание, н...
OVERLINK
13
Здравствуйте, хочу сделать HelloWorld в консоли Дельфи, но функция API ничего не выводит, что я делаю не так? program Hello; {$APPTYPE CONSOLE} uses System.SysUtils, WinAPI.Wi...
Sergey Vinogradov
20
Карта сайта