【发布时间】:2019-08-01 10:39:11
【问题描述】:
我必须为 API 调用实现 Retrofit2。在尝试实现拦截器以执行刷新令牌 api 调用并继续当前的 api cals, 由于响应如下所示,我们无法执行 authtoken 失败检查
{
"error": "invalid_grant",
"error_description": "Token needs refresh",
"mode": "dev",
"needs_refresh": true,
"statusCode": 400,
"success": false,
"url": "/transactions"
}
我们如何在拦截器中处理此响应并执行刷新令牌 api 调用。
这就是我的拦截器的样子。我想检查键“needs_refresh”来执行 getNewToken()
override fun intercept(chain: Interceptor.Chain?): Response {
var request = chain!!.request()
var response = chain.proceed(request)
if(response.code()==400) {
getNewToken()
}
val token: String = MyApp.prefs[PrefConstants.KEY_PREF_ACCESS_TOKEN,""]
if(!token.isEmpty())
request = request?.newBuilder()
?.header("Authorization", "Bearer " + token)
?.build()
else
request = request?.newBuilder()
?.build()
return chain.proceed(request)
}
【问题讨论】:
-
您可以在响应中获取状态码。
-
确保你的 getNewToken() 方法有使用 execute() 的改造调用,而不是 enqueue() ?
-
确定我的 getNewtoken() 使用相同的想法。但我的问题是从错误中识别我们是否需要执行 getNewToken 。我想检查“needs_refresh”键
标签: android kotlin retrofit retrofit2 interceptor