如何解决在Android中使用Retrofit2 / Kotlin成功刷新Oauth 2令牌后出现400错误
这是我使用kotlin广告翻新2在android应用中刷新令牌的代码。
gradle
:
implementation "com.squareup.retrofit2:retrofit:2.9.0"
implementation "com.squareup.retrofit2:converter-moshi:retrofit:2.9.0"
而Authenticator
是:
class OAuthAuthenticator(
private val refreshTokenService: Repository,private val sessionManager: SessionManager
) : Authenticator {
@Synchronized
override fun authenticate(route: Route?,response: Response): Request? {
try {
//synchronized call to refresh the token
val refreshTokenResponse =
refreshTokenService.refreshJWTToken(sessionManager.getAuthTokens())
val sessionDataResponseBody = refreshTokenResponse.body()
if (refreshTokenResponse.isSuccessful && sessionDataResponseBody != null && !sessionDataResponseBody.jwt.isNullOrEmpty()) {
sessionManager.jwtToken = sessionDataResponseBody.jwt
// retry request with the new tokens (I get 400 error)
return response.request()
.newBuilder()
.addHeader("Authorization","Bearer ${sessionManager.jwtToken}")
.build()
} else {
throw HttpException(refreshTokenResponse)
}
} catch (throwable: Throwable) {
when (throwable) {
is HttpException -> {
onSessionExpiration()
return null
}
}
}
return null
}
private fun onSessionExpiration() {
sessionManager.clear()
}
}
这是Repository
类:
object Repository {
fun refreshJWTToken(authTokens : AuthTokens) = RetrofitBuilder.userApi.getAuthenticationToken(authTokens).execute()
}
这是API
:
interface UserAPI {
@Headers("Cache-Control: no-cache")
@POST(AUTH_TOKENS_URL)
fun getAuthenticationToken(
@Header("Accept") accept : String,@Header("Content-Type") contentType : String,@Body params: AuthTokens
): Call<AuthTokenResponse>
}
retrofit builder
:
init {
val connectivityManager =
context.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
val sessionManager = SessionManager.getInstance(context)
val httpLoggingInterceptor =
HttpLoggingInterceptor()
httpLoggingInterceptor.level = HttpLoggingInterceptor.Level.BODY
httpClient = OkHttpClient.Builder()
.addInterceptor(httpLoggingInterceptor)
.addInterceptor(ConnectivityCheckInterceptor(connectivityManager))
.addInterceptor(AuthInterceptor(sessionManager))
.authenticator(OAuth2Authenticator(UserRepository,sessionManager))
.readTimeout(TIME_OUT,TimeUnit.SECONDS)
.build()
}
问题: 我可以确认该代码刷新了Auth令牌并成功地将其持久保存。但是在那之后我得到了400错误。关于我在做什么错的任何建议吗?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。