需要调用一个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网关?
如何防止对象在 Retrofit2 的 API 调用中发送空字段