У меня есть такой аутентификатор
@Singleton
class TokenAutheticator @Inject constructor(private val tokenHolder: Lazy<TokenHolder>,private val tokenInterceptor: TokenInterceptor):Authenticator {
override fun authenticate(route: Route?, response: Response): Request? {
val resp = tokenHolder.get().tokenService.relogin(tokenInterceptor.token).execute()
println("### res "+resp.code())
if (resp.code()==200) {
val body = tokenHolder.get().tokenService.relogin(tokenInterceptor.token).execute()?.body()
val newToken = body?.token
println("########## authenticator ########## ")
val url = route?.address()?.url()?.newBuilder()?.addQueryParameter("token", newToken)?.build()
return response.request().newBuilder().url(url).build()
}else{
return null
}
}
}
Когда resp.code != 200
Аутентификатор вызывается несколько раз.
Я подключаю его в Охттп вот так
@Provides
@Singleton
fun provideOkhttp(tokenInterceptor: TokenInterceptor, tokenAutheticator: TokenAutheticator): OkHttpClient {
val logging = HttpLoggingInterceptor()
logging.setLevel(HttpLoggingInterceptor.Level.BODY)
val client = OkHttpClient.Builder()
.authenticator(tokenAutheticator)
.addInterceptor(logging)
.addInterceptor(tokenInterceptor)
.build()
return client
}
Итак, я хочу, чтобы Аутентификатор попробовал его только один раз, и если он может получить новый токен, используйте новый токен с этого момента, и если он не может получить новый токен, выйдите. Но Authenticator вызывается несколько раз, и API отвечает слишком многими попытками. Любая помощь приветствуется. Спасибо