需要调用一个api来使用retrofit在android mvvm中刷新令牌,在哪里编写逻辑?

Posted

技术标签:

【中文标题】需要调用一个api来使用retrofit在android mvvm中刷新令牌,在哪里编写逻辑?【英文标题】:Need to call an api to refresh token in android mvvm using retrofit ,where to write the logic? 【发布时间】:2020-03-07 04:57:00 【问题描述】:

在登录时我们得到一个授权令牌和一个刷新令牌,授权令牌与所有API在header中附加,但一段时间后授权令牌将过期,我们将得到401,到刷新我们需要使用我们在登录时获得的刷新令牌调用一个 API 作为响应,我们将获得一个新的授权令牌和刷新令牌,问题是在哪里捕获 401 并在 一点写入调用刷新令牌 API 并重新发送之前失败的API,我们无法在拦截器中调用API。

【问题讨论】:

【参考方案1】:

查看此Refresh Access Token globally (Separate logic as a module) using RxJava 2, Rxandroid 2 and Retrofit 2 帖子。 也许对你有帮助

【讨论】:

【参考方案2】:

Okhttp(它作为改造的 http 层)有一种机制可以做到这一点。看看https://square.github.io/okhttp/4.x/okhttp/okhttp3/-authenticator/

您在设置期间向 Okhttp 构建器提供 Authenticator,然后它会响应 401 错误响应以获取刷新令牌。

【讨论】:

以上是关于需要调用一个api来使用retrofit在android mvvm中刷新令牌,在哪里编写逻辑?的主要内容,如果未能解决你的问题,请参考以下文章

如何在Android上通过retrofit2调用带有Cognito Credentials的API网关?

OkHttp 和 Retrofit,用并发请求刷新令牌

如何对 Retrofit api 调用进行单元测试?

如何防止对象在 Retrofit2 的 API 调用中发送空字段

RxJava Retrofit2 api 使用 subscribe 或 flatmap 多次调用

我尝试使用 Retrofit 将我的 JSON 解析为我的 Java