Junior — Middle
Czy można użyć Retrofit do automatycznego obsługiwania wygasłych tokenów podczas wykonywania zapytań API?
sobes.tech AI
Odpowiedź od AI
Retrofit samo w sobie nie zapewnia wbudowanego mechanizmu automatycznego obsługi wygasłych tokenów (np. aktualizacji tokena po otrzymaniu 401 Unauthorized). Jednak można to zaimplementować za pomocą niestandardowego interceptora OkHttp, który przechwytuje odpowiedzi, sprawdza kod błędu i w razie potrzeby wykonuje logikę odświeżania tokena i ponownego żądania.
Przykład użycia interceptora do odświeżania tokena:
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) { // token wygasł
synchronized(this) {
val newToken = tokenProvider.refreshToken() // odświeżanie tokena
request = chain.request().newBuilder()
.header("Authorization", "Bearer $newToken")
.build()
return chain.proceed(request) // ponowne żądanie z nowym tokenem
}
}
return response
}
}
W ten sposób Retrofit w połączeniu z interceptorami OkHttp pozwala na automatyczne obsługiwanie wygasłych tokenów.