Contenu du post
Обновление API токена в OkHttp/Retrofit OkHttp поддерживает возможность обновления токена через специальный интерфейс Authenticator, которые срабатывает если API запрос на сервер вернет код 401 Unauthorized class TokenAuthenticator(private val tokenProvider: TokenProvider) : Authenticator { @Throws(IOException::class) override fun authenticate(route: Route?, response: Response): Request? = runBlocking { // Получаем новый токен val newToken = tokenProvider.refreshToken() // Если токен не удалось обновить, возвращаем null if (newToken == null) return null // Сохраняем новый токен tokenProvider.saveToken(newToken) // Создаем новый запрос с обновленным токеном return response.request.newBuilder() .header("Authorization", "Bearer $newToken") .build() } } // Пример API для работы с токеном interface TokenProvider { suspend fun getSavedToken(): String? suspend fun saveToken(newToken: String) suspend fun refreshToken(token: String?): String? } Добавление Authenticator в OkHttp fun createOkHttpClient(tokenProvider: TokenProvider): OkHttpClient { return OkHttpClient.Builder() .authenticator(TokenAuthenticator(tokenProvider)) .build() } Я часто сталкивался с тем, что реализация бэкенда возвращает отличный HTTP код и тогда уже приходится делать решение через Interceptor. Делитесь в комментариях как вы пишите логике по обновлению токенов. #okhttp#сеть#лучшиепрактики