[英]OAuth Auto Refresh Token if token is expired
我将使用OAuth2.0制作一个用于我的应用程序的登录系统,一切正常,直到达到Expired Token为止!
在本节中,我编写了此方法:
public static String getAccessToken(){
String accessToken;
if(!UserSession.getInstance().isExpired()){
return UserSession.getInstance().getUserAuthAccessToken();
} else {
PostRequests.getFreshToken(new ResultListener<String>() {
@Override
public void getResult(String result, boolean error) {
if(error){
} else {
Authorization authorization = gson.fromJson(result, Authorization.class);
UserSession.getInstance().setUserAuthorizationInfo(authorization.AccessToken, authorization.TokenType, authorization.Expiration, authorization.RefreshToken, authorization.Scope);
accessToken = authorization.AccessToken;
}
}
});
}
}
如您所见,如果未过期,我将在我的应用程序共享首选项中返回访问令牌存储,但是如果过期,我将发出刷新请求(Volley + Gson),以使其新鲜。
但是我无法从内部类访问accessToken
:(
如何从该方法返回String?
使用侦听器是解决此问题的一种方法。
public interface ITokenListener {
void onTokenObtained(String accessToken);
}
public void usingGetAccessTokenMethod() {
getAccessToken(new ITokenListener() {
@Override
public void onTokenObtained(String accessToken) {
//use accessToken
}
});
}
public void getAccessToken(final ITokenListener listener){
if(!UserSession.getInstance().isExpired()){
listener.onTokenObtained(UserSession.getInstance().getUserAuthAccessToken());
} else {
PostRequests.getFreshToken(new ResultListener<String>() {
@Override
public void getResult(String result, boolean error) {
if(error){
} else {
Authorization authorization = gson.fromJson(result, Authorization.class);
UserSession.getInstance().setUserAuthorizationInfo(authorization.AccessToken, authorization.TokenType, authorization.Expiration, authorization.RefreshToken, authorization.Scope);
listener.onTokenObtained(UserSession.getInstance().getUserAuthAccessToken());
}
}
});
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.