Ктотор клиент, как правильно выставить токен доступа после его получения? ⇐ Android

Форум для тех, кто программирует под Android
Anonymous
Ктотор клиент, как правильно выставить токен доступа после его получения?

Сообщение Anonymous »

Вот моя настройка клиента ktor

Код: Выделить всё

@OptIn(ExperimentalSerializationApi::class)
@Singleton
@Provides
fun provideHttpClient(
localService: LocalService,
): HttpClient {

val chuckerInterceptor = ChuckerInterceptor.Builder(App.appContext)
.collector(ChuckerCollector(App.appContext))
.maxContentLength(250000L)
.redactHeaders(emptySet())
.alwaysReadResponseBody(false)
.build()

val okhttpEngine = OkHttp.create {
addInterceptor(chuckerInterceptor)
}

return HttpClient(okhttpEngine) {

install(ContentNegotiation) {
json(
Json {
prettyPrint = true
isLenient = true
useAlternativeNames = true
ignoreUnknownKeys = true
encodeDefaults = false
explicitNulls = false

}
)
}

install(HttpTimeout) {
requestTimeoutMillis = 10_000
connectTimeoutMillis = 10_000
socketTimeoutMillis = 10_000
}

install(Logging) {
logger = object : Logger {
override fun log(message: String) {
Log.v("Logger Ktor =>", message)
}
}
level = LogLevel.ALL
}

install(ResponseObserver) {
onResponse { response ->
Log.d("HTTP status:", "${response.status.value}")
}
}

install(DefaultRequest) {
header(HttpHeaders.ContentType, ContentType.Application.Json)

}

defaultRequest {

contentType(ContentType.Application.Json)
accept(ContentType.Application.Json)

}

install(Auth) {
bearer {
refreshTokens {

val token = client.get {
markAsRefreshTokenRequest()
url(BASE_URL + REFRESH_TOKEN)
parameter("refreshToken", localService.getRefreshToken())
}.body()
BearerTokens(
accessToken = token.accessToken.token,
refreshToken = token.refreshToken.token
)
}
loadTokens {

BearerTokens(
accessToken = localService.getAccessToken().orEmpty(),
refreshToken = localService.getRefreshToken().orEmpty(),
)
}
}
}
}
}
Проблема связана с токеном доступа. Когда я получаю токены доступа и обновления после успешной аутентификации, я сохраняю их в локальном хранилище (DataStore). Затем, когда я пытаюсь сделать следующий запрос, в запросе нет токена, но когда я снова открываю приложение, все в порядке. Насколько я понял, ktor не может во время выполнения получить токен из локального хранилища и обновить клиент после того, как я его сохранил? Как это решить?

Подробнее здесь: https://stackoverflow.com/questions/780 ... ceiving-it

Вернуться в «Android»