如何使用Retrofit2以正确的方式处理刷新令牌的到期?

时间:2019-04-17 12:56:27

标签: android retrofit2

基本上,我有一个连接到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
        }
    }

现在的问题是,刷新令牌在全局范围内到期时如何处理?我想避免在每个请求中使用强引用和处理单个响应。

0 个答案:

没有答案