基本上,我有一个连接到REST API的应用程序。 API提供有关身份验证的刷新令牌(刷新令牌可使用1个月)。身份验证后,您可以请求有效期约1小时的访问令牌。
android应用程序使用架构组件导航(基本上我只有一个主机活动,所有视图都是片段)并进行了改装2。
要刷新访问令牌,我实现了okhttp3提供的自定义身份验证器。这是它的样子:
override fun authenticate(route: Route?, response: Response): Request? {
if( response.code() == 401) {
val userData = UserData(context)
val userService = UserService(context)
val exchangeCall = userService.exchangeToken(Token(userData.refreshToken)).execute()
if (exchangeCall.code() == 201) {
return response.request().newBuilder()
.addHeader("Authorization", exchangeCall.body()!!.token)
.build()
} else {
// user should authenticate again
return null
}
} else {
return null
}
}
现在的问题是,刷新令牌在全局范围内到期时如何处理?我想避免在每个请求中使用强引用和处理单个响应。