Sobes.tech
Junior — Middle

Is it possible to use Retrofit for automatic handling of expired tokens during API requests?

sobes.tech AI

Answer from AI

Retrofit itself does not provide a built-in mechanism for automatic handling of expired tokens (for example, updating the token upon receiving a 401 Unauthorized). However, this can be implemented using a custom OkHttp interceptor that intercepts responses, checks the error code, and if necessary, performs token refresh logic and retries the request.

Example of using an interceptor for token refresh:

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 expired
            synchronized(this) {
                val newToken = tokenProvider.refreshToken() // refresh token
                request = chain.request().newBuilder()
                    .header("Authorization", "Bearer $newToken")
                    .build()
                return chain.proceed(request) // retry request with new token
            }
        }

        return response
    }
}

Thus, Retrofit combined with OkHttp interceptors allows implementing automatic handling of expired tokens.

Is it possible to use Retrofit for automatic handling… - sobes.tech