Sobes.tech
Junior — Middle

Ar galima naudoti Retrofit automatiškai apdoroti pasibaigusius tokenus API užklausų metu?

sobes.tech AI

Atsakymas iš AI

Retrofit pats sauje neuztikrina įmontuoto mechanizmo automatiškai apdoroti pasibaigusį tokeną (pavyzdžiui, atnaujinti tokeną gaunant 401 Unauthorized). Tačiau tai galima įgyvendinti naudojant individualų OkHttp interceptorę, kuri perima atsakymus, tikrina klaidos kodą ir, jei reikia, atlieka tokeno atnaujinimo logiką ir pakartotinį užklausimą.

Tokeno atnaujinimo interceptorės pavyzdys:

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) { // pasibaigęs tokenas
            synchronized(this) {
                val newToken = tokenProvider.refreshToken() // atnaujinti tokeną
                request = chain.request().newBuilder()
                    .header("Authorization", "Bearer $newToken")
                    .build()
                return chain.proceed(request) // pakartoti užklausą su nauju tokenu
            }
        }

        return response
    }
}

Taip, Retrofit kartu su OkHttp interceptoriais leidžia įgyvendinti automatinį pasibaigusio tokeno valdymą.