Sobes.tech
Junior — Middle

Pode usar Retrofit para lidar automaticamente com tokens expirados ao fazer solicitações API?

sobes.tech IA

Resposta da IA

O Retrofit por si só não fornece um mecanismo incorporado para o tratamento automático de tokens expirados (por exemplo, atualizar o token ao receber um 401 Unauthorized). No entanto, isso pode ser implementado usando um interceptor personalizado do OkHttp, que intercepta as respostas, verifica o código de erro e, se necessário, executa a lógica de atualização do token e reenvia a solicitação.

Exemplo de uso de um interceptor para atualizar o 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 expirado
            synchronized(this) {
                val newToken = tokenProvider.refreshToken() // atualiza o token
                request = chain.request().newBuilder()
                    .header("Authorization", "Bearer $newToken")
                    .build()
                return chain.proceed(request) // reenvia a solicitação com o novo token
            }
        }

        return response
    }
}

Dessa forma, o Retrofit em conjunto com interceptores do OkHttp permite implementar o tratamento automático de tokens expirados.