Ктотор клиент, как правильно выставить токен доступа после его получения?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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

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