Sobes.tech
Junior — Middle

Se poate folosi Retrofit pentru a gestiona automat tokenurile expirate în timpul solicitărilor API?

sobes.tech AI

Răspuns de la AI

Retrofit în sine nu oferă un mecanism încorporat pentru gestionarea automată a tokenurilor expirate (de exemplu, actualizarea tokenului la primirea unui 401 Unauthorized). Cu toate acestea, acest lucru poate fi realizat folosind un interceptor personalizat OkHttp, care intercepta răspunsurile, verifică codul de eroare și, dacă este necesar, execută logica de actualizare a tokenului și re-trimiterea cererii.

Exemplu de utilizare a unui interceptor pentru actualizarea tokenului:

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) { // tokenul a expirat
            synchronized(this) {
                val newToken = tokenProvider.refreshToken() // actualizează tokenul
                request = chain.request().newBuilder()
                    .header("Authorization", "Bearer $newToken")
                    .build()
                return chain.proceed(request) // re-trimite cererea cu noul token
            }
        }

        return response
    }
}

Astfel, Retrofit împreună cu interceptors de la OkHttp permit implementarea automată a gestionării tokenurilor expirate.