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 ответов

40 просмотров

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

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

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

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

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

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

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

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

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

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта