簡體   English   中英

如何使用暫停 api function 的身份驗證器? Retrofit

[英]how to use Authenticator with suspend api function? Retrofit

我正在建立客戶:

OkHttpClient().newBuilder()
        .authenticator(object : Authenticator {
        override fun authenticate(route: Route?, response: Response): Request? {
            val request = AppPreferences.refreshToken?.let {
                api.refreshTokenC(it).execute()
            }
            
         ...
        })

為此,我使用通常的樂趣來返回調用:

@POST("Accounts/refresh")
fun refreshTokenC(@Query("refreshToken") refreshToken: String): Call<TokenResponse>

但是如何將它與暫停 function 一起使用?:

    @POST("Accounts/refresh")
suspend fun refreshToken(@Query("refreshToken") refreshToken: String): Response<TokenResponse>
  • fun authenticate(route: Route?, response: Response)不是掛起 function,我們不能從中調用掛起 function。

  • 可以使用runBlocking

運行一個新的協程並中斷當前線程直到它完成。 此 function 不應在協程中使用。 它旨在將常規阻塞代碼連接到以掛起樣式編寫的庫,以用於主要功能和測試。

  • fun authenticate(route: Route?, response: Response)在后台線程上被調用,我們可以安全地使用runBlocking
val request = AppPreferences.refreshToken?.let { token ->
    runBlocking { api.refreshToken(token) }
}

類似代碼: AuthInterceptor.kt

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM