Sobes.tech
Junior — Middle

È possibile utilizzare Retrofit per gestire automaticamente i token scaduti durante le richieste API?

sobes.tech AI

Risposta dell'AI

Retrofit di per sé non fornisce un meccanismo integrato per la gestione automatica dei token scaduti (ad esempio, aggiornare il token al ricevimento di un 401 Unauthorized). Tuttavia, questo può essere realizzato utilizzando un intercettore personalizzato di OkHttp, che intercetta le risposte, verifica il codice di errore e, se necessario, esegue la logica di aggiornamento del token e ripete la richiesta.

Esempio di utilizzo di un intercettore per aggiornare il token:

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 scaduto
            synchronized(this) {
                val newToken = tokenProvider.refreshToken() // aggiorna il token
                request = chain.request().newBuilder()
                    .header("Authorization", "Bearer $newToken")
                    .build()
                return chain.proceed(request) // ripete la richiesta con il nuovo token
            }
        }

        return response
    }
}

In questo modo, Retrofit in combinazione con gli intercettori di OkHttp permette di implementare la gestione automatica dei token scaduti.