Sobes.tech
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.