приложении.
В двух словах:
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) и его рефреша происходила поочередно, а не одновременно?
Именно поэтому советуют юзать дио на случай перехвата протухшего аксесс токена и написать свой интерсептор
да, тут вопросов нет, там все четко)
к сожалению, уже слишком поздно переписывать под дио, займет уйму времени
Мне кажется в Вашем случае если только написать апи класс и сделать/переопредедить методы для http, где организовать проверку Тоже чуть дольше но хоть поправильней чтоль И проверить на синхронность запросов, если 401 будет - чтобы следующие ждали пока перезапрашиваются креды
вот примерно так же я сейчас и сделал, только, возможно, чуть более костыльнее
Обсуждают сегодня