Altynbek Nurtaza
03/28/2024, 8:01 AMsendWithoutRequest
does? The documentation says Sends credentials without waiting for HttpStatusCode.Unauthorized.
, but I can't figure out how to set it upAleksei Tirman [JB]
03/28/2024, 8:05 AMBearerAuthProvider.clearToken
method. Here, you can find the code example.Altynbek Nurtaza
03/28/2024, 8:08 AMAleksei Tirman [JB]
03/28/2024, 8:12 AMAleksei Tirman [JB]
03/28/2024, 8:24 AMfun main(): Unit = runBlocking {
val initialTokens = BearerTokens("initial", "")
val tokensFlow = MutableStateFlow(initialTokens)
val client = HttpClient(CIO) {
install(Auth) {
bearer {
sendWithoutRequest { true }
loadTokens {
tokensFlow.value
}
refreshTokens {
BearerTokens("new", "")
}
}
}
}
val tokens = client.refresh()
tokensFlow.compareAndSet(initialTokens, tokens)
val r = client.get("<https://httpbin.org/bearer>")
println(r.bodyAsText())
}
suspend fun HttpClient.refresh(): BearerTokens {
return BearerTokens("refreshed", "")
}
Altynbek Nurtaza
03/29/2024, 8:30 AMinterface AuthProvider {
...
suspend fun refreshToken(response: HttpResponse): Boolean
}
takes an HttpResponse
as a parameterAltynbek Nurtaza
03/29/2024, 8:31 AMfun provideDummyResponse(client: HttpClient): HttpResponse {
return object : HttpResponse() {
override val call: HttpClientCall
get() = HttpClientCall(client)
@InternalAPI override val content: ByteReadChannel
get() = error("Unreachable code")
override val coroutineContext: CoroutineContext
get() = error("Unreachable code")
override val headers: Headers
get() = error("Unreachable code")
override val requestTime: GMTDate
get() = error("Unreachable code")
override val responseTime: GMTDate
get() = error("Unreachable code")
override val status: HttpStatusCode
get() = error("Unreachable code")
override val version: HttpProtocolVersion
get() = error("Unreachable code")
}
}
do you know if there is a more elegant way to do this?Aleksei Tirman [JB]
03/29/2024, 8:46 AMHttpResponse
object come from and how it's used in the refreshToken
method body?Altynbek Nurtaza
03/29/2024, 9:00 AMpublic override suspend fun refreshToken(response: HttpResponse): Boolean {
val newToken = tokensHolder.setToken {
refreshTokens(RefreshTokensParams(response.call.client, response, tokensHolder.loadToken()))
}
return newToken != null
}
Aleksei Tirman [JB]
03/29/2024, 9:04 AMAltynbek Nurtaza
03/29/2024, 9:05 AMAleksei Tirman [JB]
03/29/2024, 9:07 AMAltynbek Nurtaza
03/29/2024, 9:07 AMAltynbek Nurtaza
03/29/2024, 9:08 AMHttpResponse
as a parameter when i have just opened the app and haven't done a single request