У меня есть базовая c Retrofit
настройка для сетевых запросов. У меня есть следующее Authenticator
, которое добавляется в цепочку. Он в основном пытается обновить sh токен доступа при возникновении ошибки авторизации (401).
class TokenAuthenticator(private val api: MyApi) : Authenticator {
override fun authenticate(route: Route?, response: Response): Request? {
val retrofitResponse = api.refreshAccessToken("my refresh token here"))
val refreshResponse= retrofitResponse.blockingGet()
return if(refreshResponse != null) {
response.request().newBuilder()
.header(Const.HEADER_AUTHORIZATION, "Bearer " + refreshResponse.accessToken)
.build()
} else {
return null
}
}
}
Проблема в том, что мой сервер может вернуть 401 не только для проблем с авторизацией, но и для некоторых других случаев. Например, я могу получить ответ с 401, если номер телефона пользователя уже существует в базе данных. Сервер возвращает мне error_code
параметр, чтобы различать проблемы этого типа:
error_code = "token_expired"
-> проблема авторизации. показывает, что токен доступа истек.
error_code = "phone_exists"
-> показывает номер телефона, который уже введен в базу данных.
Итак, мне нужно иметь возможность проверить этот параметр, прежде чем решить, что ошибка была ошибкой токена доступа refre sh. Как я могу это сделать?
В настоящее время, так как я не смог проверить этот параметр, мое приложение считает, что 401 - это проблема с авторизацией, и постоянно пытается обновить sh токен доступа, даже если мой токен доступа не истек.