Sobes.tech
Junior — Middle

Je možné použiť Retrofit na automatické spracovanie vypršaných tokenov pri vykonávaní API požiadaviek?

sobes.tech AI

Odpoveď od AI

Retrofit sám o sebe ne poskytuje zabudovaný mechanizmus pre automatické spracovanie vypršaných tokenov (napríklad aktualizáciu tokenu pri prijatí 401 Unauthorized). To však možno realizovať pomocou vlastného OkHttp interceptora, ktorý zachytáva odpovede, kontroluje chybový kód a v prípade potreby vykonáva logiku aktualizácie tokenu a opätovného odoslania požiadavky.

Príklad použitia interceptora na aktualizáciu 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šal
            synchronized(this) {
                val newToken = tokenProvider.refreshToken() // aktualizácia tokenu
                request = chain.request().newBuilder()
                    .header("Authorization", "Bearer $newToken")
                    .build()
                return chain.proceed(request) // opätovné odoslanie požiadavky s novým tokenom
            }
        }

        return response
    }
}

Týmto spôsobom Retrofit v spojení s interceptormi OkHttp umožňuje automatické spracovanie vypršaných tokenov.