Sobes.tech
Junior — Middle

Peut-on utiliser Retrofit pour gérer automatiquement les jetons expirés lors de l'exécution des requêtes API?

sobes.tech IA

Réponse de l'IA

Retrofit lui-même ne fournit pas de mécanisme intégré pour la gestion automatique des jetons expirés (par exemple, la mise à jour du jeton lors de la réception d’un 401 Unauthorized). Cependant, cela peut être réalisé à l’aide d’un intercepteur personnalisé OkHttp, qui intercepte les réponses, vérifie le code d’erreur et, si nécessaire, exécute la logique de mise à jour du jeton et de nouvelle requête.

Exemple d’utilisation d’un intercepteur pour mettre à jour le jeton :

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) { // jeton expiré
            synchronized(this) {
                val newToken = tokenProvider.refreshToken() // met à jour le jeton
                request = chain.request().newBuilder()
                    .header("Authorization", "Bearer $newToken")
                    .build()
                return chain.proceed(request) // répète la requête avec le nouveau jeton
            }
        }

        return response
    }
}

Ainsi, Retrofit associé aux intercepteurs OkHttp permet de réaliser une gestion automatique des jetons expirés.