Junior — Middle
Da li se Retrofit može koristiti za automatsko rukovanje isteklim tokenima prilikom izvršavanja API zahteva?
sobes.tech АИ
Одговор од АИ
Retrofit sam po sebe ne pruža ugrađeni mehanizam za automatsku obradu istekao tokena (na primer, ažuriranje tokena pri dobijanju 401 Unauthorized). Međutim, to se može implementirati pomoću prilagođenog OkHttp interceptora, koji presreće odgovore, proverava kod greške i, ako je potrebno, izvršava logiku ažuriranja tokena i ponovnog slanja zahteva.
Primer korišćenja interceptora za ažuriranje 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 istekao
synchronized(this) {
val newToken = tokenProvider.refreshToken() // osvežavanje tokena
request = chain.request().newBuilder()
.header("Authorization", "Bearer $newToken")
.build()
return chain.proceed(request) // ponovo šaljemo zahtev sa novim tokenom
}
}
return response
}
}
Na ovaj način, Retrofit u kombinaciji sa OkHttp interceptorima omogućava automatsko upravljanje isteklim tokenima.