Sobes.tech
Назад к вопросам
Junior — Middle
81

Можно ли использовать Retrofit для автоматической обработки истекших токенов при выполнении API-запросов?

Компании, где спрашивали
Viasat tech

Ответ от нейросети

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 интерсепторами позволяет реализовать автоматическую обработку истекших токенов.