Retrofit - Handle refresh token expiration(翻新-句柄刷新令牌到期)
问题描述
当我的应用的访问令牌过期时,我使用刷新令牌通过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是由于访问令牌过期还是由于刷新令牌过期。处理此问题最合适的方法是什么?
谢谢!
推荐答案
您可以查看AppAuth-Android实现。
在进行任何调用之前,您可以check that you still have a valid access token,获取其过期时间,并将其与
clock.getCurrentTimeMillis()
的结果进行比较。仅在访问令牌由于其他原因无效(例如,可以手动吊销访问令牌)的情况下,您可以使用Okhttp Interceptor来响应401。
如果访问令牌过期或您获得401,您可以尝试refresh the access token with your refresh token。
如果刷新标记不再有效,
/token
端点将返回following error:
HTTP/1.1 400错误请求{&Q;错误&Q;:&Q;INVALID_REQUEST&Q;}
- 如果您收到该错误,您可以注销用户并向他发送应用程序的登录屏幕。
希望它能帮助您。
这篇关于翻新-句柄刷新令牌到期的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:翻新-句柄刷新令牌到期


基础教程推荐
- iPhone - 获取给定地点/时区的当前日期和时间并将其与同一地点的另一个日期/时间进行比较的正确方法 2022-01-01
- AdMob 广告未在模拟器中显示 2022-01-01
- libGDX 从精灵或纹理中获取像素颜色 2022-01-01
- Android:getLastKnownLocation(LocationManager.NETWORK_PROVIDER 2022-01-01
- 通过重定向链接在 Google Play 中打开应用 2022-01-01
- NSString intValue 不能用于检索电话号码 2022-01-01
- navigator.geolocation.getCurrentPosition 在 Android 浏览器上 2022-01-01
- Cocos2d iPhone 非矩形精灵触摸检测 2022-01-01
- iOS4 创建后台定时器 2022-01-01
- 如何从 logcat 中删除旧数据? 2022-01-01