Когда истекает токен доступа моего приложения, я использую токен обновления, чтобы получить новый токен доступа через класс Authenticator.
Мой код следующий:
if (response.code() == 401) {
Log.d("refresh", "Access token expired")
val webservice: Webservice = RetrofitClient.makeRetrofitService().create(Webservice::class.java)
var refreshToken = PreferenceData.getUserLoggedInRefreshToken(App.GetContext()!!)
var map = generateRequestBody(mapOf("refreshToken" to refreshToken!!))
var refreshResponse = webservice.refreshToken(map).execute()
if (refreshResponse != null && refreshResponse.code() == 200) {
Log.d("refresh", "New access token received")
var newToken = (refreshResponse.body() as UserLogin).token
var refreshToken = (refreshResponse.body() as UserLogin).refreshToken
PreferenceData.setUserLoggedInAccessToken(App.GetContext()!!, newToken)
PreferenceData.setUserLoggedInRefreshToken(App.GetContext()!!, refreshToken)
return response.request().newBuilder()
.header("Authorization", "Bearer $newToken")
.build();
}
}
Пока все хорошо.
Теперь я хочу, чтобы по истечении срока действия моего маркера обновления я хотел бы перенаправить пользователя на экран входа в приложение. Но моя проблема в том, когда я звоню
var refreshResponse = webservice.refreshToken(map).execute()
сервер также возвращает 401. Поэтому моя проблема в том, что я не могу сказать, является ли полученное 401 из-за истечения срока действия маркера доступа или истечения срока действия маркера обновления. Какой самый подходящий способ решить эту проблему?
спасибо!