Sobes.tech
Junior — Middle

API so'rovlarida muddati o'tgan tokenlarni avtomatik ravishda boshqarish uchun Retrofit ishlatilishi mumkinmi?

sobes.tech AI

AIdan javob

Retrofit o'z-o'zidan tugash uchun tokenlarni avtomatik tarzda qayta ishlash uchun ichki mexanizmni ta'minlamaydi (masalan, 401 Unauthorized olganda tokenni yangilash). Biroq, bu OkHttp ning maxsus interceptori yordamida amalga oshirilishi mumkin, u javoblarni ushlaydi, xato kodini tekshiradi va zarur bo'lsa, tokenni yangilash va so'rovni takrorlash logikasini bajaradi.

Tokenni yangilash uchun interceptor misoli:

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 muddati o'tgan
            synchronized(this) {
                val newToken = tokenProvider.refreshToken() // tokenni yangilash
                request = chain.request().newBuilder()
                    .header("Authorization", "Bearer $newToken")
                    .build()
                return chain.proceed(request) // yangi token bilan so'rovni takrorlash
            }
        }

        return response
    }
}

Shu tarzda, Retrofit va OkHttp interceptorlari bilan birga ishlash orqali muddati o'tgan tokenlarni avtomatik tarzda boshqarish mumkin.