Sobes.tech
Junior — Middle

Czy można użyć Retrofit do automatycznego obsługiwania wygasłych tokenów podczas wykonywania zapytań API?

sobes.tech AI

Odpowiedź od AI

Retrofit samo w sobie nie zapewnia wbudowanego mechanizmu automatycznego obsługi wygasłych tokenów (np. aktualizacji tokena po otrzymaniu 401 Unauthorized). Jednak można to zaimplementować za pomocą niestandardowego interceptora OkHttp, który przechwytuje odpowiedzi, sprawdza kod błędu i w razie potrzeby wykonuje logikę odświeżania tokena i ponownego żądania.

Przykład użycia interceptora do odświeżania tokena:

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 wygasł
            synchronized(this) {
                val newToken = tokenProvider.refreshToken() // odświeżanie tokena
                request = chain.request().newBuilder()
                    .header("Authorization", "Bearer $newToken")
                    .build()
                return chain.proceed(request) // ponowne żądanie z nowym tokenem
            }
        }

        return response
    }
}

W ten sposób Retrofit w połączeniu z interceptorami OkHttp pozwala na automatyczne obsługiwanie wygasłych tokenów.