Sobes.tech
Junior — Middle

Lze použít Retrofit k automatickému zpracování vypršených tokenů při provádění API požadavků?

sobes.tech AI

Odpověď od AI

Retrofit sám o sobě neposkytuje vestavěný mechanismus pro automatické zpracování vypršelých tokenů (například aktualizaci tokenu při obdržení 401 Unauthorized). To však lze realizovat pomocí vlastního interceptoru OkHttp, který zachytává odpovědi, kontroluje chybový kód a v případě potřeby provádí logiku aktualizace tokenu a opětovného odeslání požadavku.

Příklad použití interceptoru pro aktualizaci tokenu:

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 vypršel
            synchronized(this) {
                val newToken = tokenProvider.refreshToken() // aktualizace tokenu
                request = chain.request().newBuilder()
                    .header("Authorization", "Bearer $newToken")
                    .build()
                return chain.proceed(request) // opětovné odeslání požadavku s novým tokenem
            }
        }

        return response
    }
}

Tímto způsobem Retrofit ve spojení s interceptory OkHttp umožňuje automatické zpracování vypršelých tokenů.