Sobes.tech
Junior — Middle

Használható-e a Retrofit az lejárt tokenek automatikus kezelésére API-kérések során?

sobes.tech MI

Válasz az MI-től

A Retrofit önmagában nem biztosít beépített mechanizmust az lejárt tokenek automatikus kezelésére (például a token frissítése 401 Unauthorized válasz esetén). Ez azonban megvalósítható egy egyedi OkHttp interceptor segítségével, amely elfogja a válaszokat, ellenőrzi a hibakódot, és szükség esetén végrehajtja a token frissítésének logikáját és az új kérés ismételt küldését.

Példa egy interceptor használatára a token frissítéséhez:

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) { // lejárt token
            synchronized(this) {
                val newToken = tokenProvider.refreshToken() // token frissítése
                request = chain.request().newBuilder()
                    .header("Authorization", "Bearer $newToken")
                    .build()
                return chain.proceed(request) // kérés újra küldése az új tokennel
            }
        }

        return response
    }
}

Így a Retrofit az OkHttp interceptoraival együtt lehetővé teszi a lejárt tokenek automatikus kezelését.