Android модифицированный перехватчик не может связать обновленное значение Prefs - PullRequest
1 голос
/ 12 апреля 2020

Вот мой перехватчик, прикованный для всех исходящих запросов. После запроса «/ login» токен обновляется. Я использую easyprefs для доступа к sharedpreference. Но при следующем запросе обновленное значение AUTH_TOKEN не связывается. Кто-нибудь предложит обходной путь.

class AuthInterceptor : Interceptor {
    val token = Prefs.getString("AUTH_TOKEN", "")
    val authToken = "Bearer $token"

    override fun intercept(chain: Interceptor.Chain): Response {
        val newRequest = chain.request().newBuilder()
            .addHeader("Api-key", "xxx-xxx-xadxsdx-fsccsag-xxx-xx")
            .addHeader("Authorization", authToken)
            .build()

        return chain.proceed(newRequest)
    }
}

Ответы [ 2 ]

3 голосов
/ 12 апреля 2020

Вам нужно читать токен аутентификации после его сохранения, а не при создании экземпляра перехватчика:

class AuthInterceptor : Interceptor {

    override fun intercept(chain: Interceptor.Chain): Response {
        val token = Prefs.getString("AUTH_TOKEN", "")
        val authToken = "Bearer $token"

        val newRequest = chain.request().newBuilder()
            .addHeader("Api-key", "xxx-xxx-xadxsdx-fsccsag-xxx-xx")
            .apply {
                if (!token.isNullOrEmpty()) {
                    addHeader("Authorization", authToken)
                }
            .build()

        return chain.proceed(newRequest)
    }
}
3 голосов
/ 12 апреля 2020

Вы, вероятно, используете экземпляр Singleton, поэтому переменная экземпляра будет инициализирована один раз. С этой структурой вы должны получить значение предпочтения внутри #intercept(), чтобы вы каждый раз получали обновленные значения.

class AuthInterceptor : Interceptor {
    override fun intercept(chain: Interceptor.Chain): Response {
        val token = Prefs.getString("AUTH_TOKEN", "")
        val authToken = "Bearer $token"
        val newRequest = chain.request().newBuilder()
            .addHeader("Api-key", "xxx-xxx-xadxsdx-fsccsag-xxx-xx")
            .addHeader("Authorization", authToken)
            .build()
        return chain.proceed(newRequest)
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...