Sobes.tech
Junior — Middle

Μπορεί το Retrofit να χρησιμοποιηθεί για την αυτόματη διαχείριση ληγμένων tokens κατά την εκτέλεση API αιτημάτων;

sobes.tech AI

Απάντηση από AI

Το Retrofit από μόνο του δεν παρέχει ενσωματωμένο μηχανισμό για την αυτόματη επεξεργασία ληγμένων tokens (π.χ., ενημέρωση του token κατά τη λήψη 401 Unauthorized). Ωστόσο, αυτό μπορεί να υλοποιηθεί με τη χρήση ενός προσαρμοσμένου interceptor του OkHttp, που παρεμβαίνει στις απαντήσεις, ελέγχει τον κωδικό σφάλματος και, αν χρειάζεται, εκτελεί τη λογική ενημέρωσης του token και επανάληψης του αιτήματος.

Παράδειγμα χρήσης ενός interceptor για την ενημέρωση του 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
            synchronized(this) {
                val newToken = tokenProvider.refreshToken() // ενημέρωση token
                request = chain.request().newBuilder()
                    .header("Authorization", "Bearer $newToken")
                    .build()
                return chain.proceed(request) // επανάληψη αιτήματος με το νέο token
            }
        }

        return response
    }
}

Έτσι, το Retrofit σε συνδυασμό με τους interceptors του OkHttp επιτρέπει την αυτόματη διαχείριση ληγμένων tokens.