Sobes.tech
Junior — Middle

¿Se puede usar Retrofit para manejar automáticamente los tokens caducados al realizar solicitudes API?

sobes.tech AI

Respuesta de la IA

Retrofit por sí mismo no proporciona un mecanismo incorporado para el manejo automático de tokens caducados (por ejemplo, actualizar el token al recibir un 401 Unauthorized). Sin embargo, esto se puede implementar mediante un interceptor personalizado de OkHttp, que intercepta las respuestas, verifica el código de error y, si es necesario, realiza la lógica de actualización del token y vuelve a realizar la solicitud.

Ejemplo de uso de un interceptor para actualizar el 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 caducado
            synchronized(this) {
                val newToken = tokenProvider.refreshToken() // actualiza el token
                request = chain.request().newBuilder()
                    .header("Authorization", "Bearer $newToken")
                    .build()
                return chain.proceed(request) // vuelve a realizar la solicitud con el nuevo token
            }
        }

        return response
    }
}

De esta manera, Retrofit en conjunto con interceptores de OkHttp permite implementar el manejo automático de tokens caducados.