gpu*_*nto 14 kotlin ktor ktor-client
在我的移动应用程序中,我有一个单例 Ktor HttpClient
,其不记名身份验证配置如下:
HttpClient(\xe2\x80\xa6) {\n install(Auth) {\n bearer {\n sendWithoutRequest { requestBuilder -> some condition }\n loadTokens(tokensStorage::getTokens)\n refreshTokens {\n performTokenRefresh(oldTokens.refreshToken)\n }\n }\n }\n}\n
Run Code Online (Sandbox Code Playgroud)\n现在考虑以下流程:
\ntokenStorage
无效。HttpClient
令牌tokenStorage
,请求失败并返回 401。HttpClient
执行刷新,但也失败,因为刷新令牌无效。tokenStorage
.HttpClient
不再尝试调用loadTokens
。确实,从源代码来看,loadTokens
只被调用一次,然后就不会再被调用。我找到了解决该问题的几种方法。
\n第一个是手动BearerAuthProvider
从HttpClient
自己清除令牌,如以下代码片段所示,但这似乎是一种黑客解决方法:
httpClient.plugin(Auth).providers\n .filterIsInstance<BearerAuthProvider>()\n .first().clearToken()\n
Run Code Online (Sandbox Code Playgroud)\ntokenStorage
另一种方法是从 my in手动加载当前令牌refreshToken
并忽略传入的内容this@refreshTokens.oldTokens
:
refreshTokens {\n val currentRefreshToken = tokenStorage.getTokens().refreshToken\n performTokenRefresh(currentRefreshToken)\n}\n
Run Code Online (Sandbox Code Playgroud)\n然而,这意味着客户端将对刷新 API 进行不必要的调用,同时已经拥有有效的令牌对(从登录中获取)。
\n所以我的问题是:有没有更干净的方法来处理这种情况?我是否滥用了 Ktor?
\n 归档时间: |
|
查看次数: |
1521 次 |
最近记录: |