Ответ
Retrofit сам по себе не обрабатывает просроченные токены, но можно использовать Interceptor для автоматического обновления токена при 401 ошибке.
Пример:
class AuthInterceptor(private val tokenManager: TokenManager) : Interceptor {
override fun intercept(chain: Interceptor.Chain): Response {
val request = chain.request().newBuilder()
.addHeader("Authorization", "Bearer ${tokenManager.getToken()}")
.build()
val response = chain.proceed(request)
if (response.code == 401) {
val newToken = tokenManager.refreshToken() // синхронный запрос
val newRequest = request.newBuilder()
.header("Authorization", "Bearer $newToken")
.build()
return chain.proceed(newRequest)
}
return response
}
}
Важно:
- Обновление токена должно быть синхронным внутри
intercept(). - Учитывайте возможные рекурсии (если refresh-токен тоже протух).
- Лучше добавить механизм блокировки параллельных обновлений токена.