【问题标题】:Android clean architecture implement refresh tokenAndroid 清洁架构实现刷新令牌
【发布时间】:2021-06-06 07:40:46
【问题描述】:

我有一个用 clean architectureMVVM 模式实现的应用程序。在这个应用中,我们需要一个所有应用功能都需要的刷新令牌请求。当刷新令牌成功时,再次调用最后一个请求。实现这一点的最佳方法是什么?

我有两个想法:

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

2 - 全局实施

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

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

【问题讨论】:

  • 您使用的是哪个 HTTP 库?
  • @HåkonSchia 抱歉。我更新了我的问题。如果您需要任何详细信息,请告诉我。

标签: android kotlin mvvm clean-architecture


【解决方案1】:

使用 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()

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

【讨论】:

  • 谢谢。这可能会有所帮助。但我使用的是干净的拱门。你认为这不违反 oop 规则吗?
  • 我不太确定你的意思。正如我所说,如果你想使用这种方法,你必须决定实际的实现方式,所以你必须使它适合你的代码
猜你喜欢
  • 1970-01-01
  • 2021-02-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-05-18
  • 2020-01-17
  • 1970-01-01
  • 2018-06-15
相关资源
最近更新 更多