安卓干净架构实现刷新令牌



我有一个应用程序,它使用带有 MVVM模式的干净架构实现。在此应用中,我们需要所有应用功能都需要的刷新令牌请求。刷新令牌成功后,再次调用最后一个请求。实现这一点的最佳方法是什么?

我有两个想法:

1 - 在每个功能中实现它并使用它。因此,如果我的应用程序中有三个功能,我将实现它三次。

2 - 全球实施

我知道第一个想法,但我不知道如何做第二个我认为更好的想法。

我使用改造进行网络。结构为:数据、域、表示。

使用 Retrofit,您可以创建自定义Authenticator当请求因身份验证错误而被拒绝时触发(通常是 401,Authenticator接口的文档对此进行了详细说明)。在身份验证器中,您可以检索新令牌并使用新令牌自动创建新请求。

身份验证器将类似于:

class Authenticator : okhttp3.Authenticator {
override fun authenticate(route: Route?, response: Response): Request? {
// Make your network request to retrieve a new token
val newToken = ...
// Check if a new token was retrieved
val retrievedNewToken: Boolean = true
return if (retrievedNewToken) {
response.request().newBuilder()
.header("Authorization", "token-value-here")
.build()
} else {
// Couldn't get new token, abort the request
null
}
}
}

并在您的 OkHttpClient 中使用它:

val client = OkHttpClient.Builder()
.authenticator(Authenticator())
.build()

这是一个相当笼统的答案,因为我无法提供任何具体的方法,因为我不知道您的代码的其余部分,但这就是它的要点。需要注意的是,如果新的令牌请求已经发生,则可能需要处理,因为如果您紧接着发出多个请求,则可能会对新令牌发出多个请求,但所有请求都被拒绝。

最新更新