Junior — Middle
API суроолор учурунда мөөнөтү өтүп кеткен токендерди автоматтык түрдө иштетүү үчүн Retrofit колдонсо болобу?
sobes.tech AI
AIден жооп
Retrofit өзү-өзү менен автоматтык түрдө мөөнөтү өтүп кеткен токендерди иштетүүчү ички механизмди камсыз кылбайт (мисалы, 401 Unauthorized жооп алганда токенди жаңыртуу). Бирок, бул OkHttp өзгөчө интерцептору аркылуу ишке ашырылышы мүмкүн, ал жоопторду кармайт, ката кодун текшерет жана керек болсо, токенди жаңыртуу жана кайра суроо-талапты ишке ашырат.
Токенди жаңыртуу үчүн интерцептордун колдонуу мисалы:
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) { // мөөнөтү өтүп кеткен
synchronized(this) {
val newToken = tokenProvider.refreshToken() // токенди жаңыртуу
request = chain.request().newBuilder()
.header("Authorization", "Bearer $newToken")
.build()
return chain.proceed(request) // жаңы токен менен кайра суроо
}
}
return response
}
}
Ошентип, Retrofit жана OkHttp интерцепторлору бирге иштеп, мөөнөтү өтүп кеткен токендерди автоматтык түрдө иштетүүгө мүмкүндүк берет.