Sobes.tech
Junior — Middle
94

API сұраулары кезінде мерзімі өткен токендерді автоматты түрде өңдеу үшін Retrofit қолдануға бола ма?

Сұралған компаниялар
Viasat tech

AI-дан жауап

sobes.tech AI

Retrofit сам по себе не предоставляет встроенного механизма для автоматической обработки истекших токенов (например, обновления токена при получении 401 Unauthorized). Однако, это можно реализовать с помощью кастомного OkHttp интерсептора, который перехватывает ответы, проверяет код ошибки и при необходимости выполняет логику обновления токена и повторного запроса.

Пример использования интерсептора для обновления токена:

class AuthInterceptor(private val tokenProvider: TokenProvider) : Interceptor {
    override fun intercept(chain: Interceptor.Chain): Response {
        var request = chain.request().newBuilder()
            .addHeader("Authorization", "Bearer ${tokenProvider.getAccessToken()}")
            .build()

        val response = chain.proceed(request)

        if (response.code == 401) { // токен истек
            synchronized(this) {
                val newToken = tokenProvider.refreshToken() // обновляем токен
                request = chain.request().newBuilder()
                    .header("Authorization", "Bearer $newToken")
                    .build()
                return chain.proceed(request) // повторяем запрос с новым токеном
            }
        }

        return response
    }
}

Таким образом, Retrofit в связке с OkHttp интерсепторами позволяет реализовать автоматическую обработку истекших токенов.