Sobes.tech
Junior — Middle

API sorğuları zamanı vaxtı bitmiş tokenləri avtomatik idarə etmək üçün Retrofit istifadə oluna bilərmi?

sobes.tech Süni İntellekt

AI-dan cavab

Retrofit özü-özlüyündə vaxtı keçmiş tokenlərin avtomatik işlənməsi üçün daxili mexanizm təmin etmir (məsələn, 401 Unauthorized alınanda tokenin yenilənməsi). Ancaq, bu, OkHttp-nin xüsusi interceptoru vasitəsilə həyata keçirilə bilər, bu, cavabları ələ keçirir, xəta kodunu yoxlayır və lazım gəldikdə, tokenin yenilənməsi və yenidən sorğunun göndərilməsi loqikasını icra edir.

Tokenin yenilənməsi üçün interceptor nümunəsi:

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 vaxtı keçmiş
            synchronized(this) {
                val newToken = tokenProvider.refreshToken() // tokeni yenilə
                request = chain.request().newBuilder()
                    .header("Authorization", "Bearer $newToken")
                    .build()
                return chain.proceed(request) // yeni token ilə sorğunu təkrarla
            }
        }

        return response
    }
}

Beləliklə, Retrofit və OkHttp interceptors ilə birlikdə işləyərək, vaxtı keçmiş tokenlərin avtomatik idarə olunması mümkündür.