Главный экран делает 5 запросов — сервер получает 5 обновлений токена и разлогинивает
class TokenAuthenticator(private val auth: AuthRepository) : Authenticator {
override fun authenticate(route: Route?, response: Response): Request? {
val newToken = auth.refreshBlocking() ?: return null
return response.request.newBuilder()
.header("Authorization", "Bearer $newToken").build()
}
}
Токен истёк, главный экран параллельно отправил 5 запросов, все получили 401. Сервер одноразовый refresh-токен принимает только один раз: первое обновление успешно, остальные четыре получают ошибку, и пользователя выкидывает на логин. Как исправить?
- Синхронизировать refresh и проверять, не обновлён ли токен
- Перенести обновление токена в Interceptor
- Отправлять запросы экрана строго по очереди
- Возвращать null, чтобы OkHttp сам повторил запрос
