Как правильно обработать токен обновления с помощью retrofit2? - PullRequest
0 голосов
/ 17 апреля 2019

В основном у меня есть приложение, которое подключается к REST API.API предоставляет токен обновления при аутентификации (токен обновления доступен 1 ​​месяц).После аутентификации вы можете запросить токен доступа, действительный около 1 часа.

Приложение для Android использует компонент архитектуры Navigation (в основном у меня одно действие на хосте, и все представления являются фрагментами) и модернизация 2.

Чтобы обновить токен доступа, я реализовал собственный Authenticator, предоставленный 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
        }
    }

Вопрос теперь в том, как мне поступить, когда токен обновления истекает глобально?Я хотел бы избежать использования сильных ссылок и обработки индивидуальных ответов в каждом запросе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...