我有一个api,在认证后返回此内容
"token_type":"Bearer",
"expires_in":86400,
"access_token":"XXXXXXXXX",
"refresh_token":"XXXXXXXXXXX"
我已在sqlite数据库中成功保存了访问令牌,刷新令牌和expires_in。如何检查令牌是否已过期? 这是我到目前为止所拥有的
if(new Date().after(expiresAt)){
Toast.makeText(this, "Token expired", Toast.LENGTH_SHORT).show();
}else{
Toast.makeText(this, "You still have time", Toast.LENGTH_SHORT).show();
}
expiresAt包含expires_in值
答案 0 :(得分:6)
我建议您使用诸如retrofit之类的框架来帮助您管理身份验证,而无需在每次单独的API调用中检查expiresAt。
在Retrofit或其HTTP客户端OkHttp中。您可以使用专为刷新令牌/自动登录方案设计的新Authenticator API来处理身份验证。您可以参考此链接了解实施细节refreshing-oauth-token-using-retrofit-without-modifying-all-calls
每当您的API调用返回" 401未授权"响应,它将触发authenticator方法,运行刷新令牌API并使用新的访问令牌重新发送原始请求。