Kamil Kalisz
08/06/2021, 3:54 PMfun createHttpClient(): HttpClient {
var token: String? = "" // <- frozen
CoroutineScope(Dispatchers.Main).launch {
token = Firebase.auth.currentUser?.getIdToken(false)
Firebase.auth.idTokenChanged.collect { user ->
token = user?.getIdToken(false)
}
}
val client = HttpClient {
install(TokenFeature) {
tokenHeaderName = "Authorization"
tokenProvider = object : TokenFeature.TokenProvider {
override fun getToken(): String{
return "Bearer $token" <- frozen
}
}
}
}
return client
}
Kamil Kalisz
08/06/2021, 5:22 PMclass FirebaseTokenProvider(): TokenFeature.TokenProvider{
var firebaseToken = Atomic<String?>("")
init {
CoroutineScope(Dispatchers.Main).launch {
firebaseToken.set(Firebase.auth.currentUser?.getIdToken(false))
Firebase.auth.idTokenChanged.collect { user ->
firebaseToken.set(user?.getIdToken(false))
}
}
}
override fun getToken(): String? {
return firebaseToken.get()
}
}
alex009
08/08/2021, 11:27 AMMutableStateFlow
- that too can be used between threads. but atomic is better choice (here not needed Flow logic)