2016-05-13 154 views
0

我要做一个登录系统OAuth2.0的我的应用程序,一切是正确的,直到达到过期令牌OAuth的自动刷新令牌,如果令牌到期

对于这一部分,我写了这个方法:

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; 
       } 

      } 
     }); 

    } 

} 

正如你所看到的,我在我的应用程序共享prefrences返回访问令牌存储装置,如果没有过期,但如果过期后,我做刷新请求(排球+ Gson),让这个新鲜。

但我无法从内部类实现accessToken :(

如何我可以从这个方法返回的字符串?

回答

1

使用监听器是解决这一问题的方法之一。

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()); 
       } 

      } 
     }); 

    } 

} 
+0

其没有帮助,因为我将使用'.getAccessToken()'附加令牌来结束我喜欢'最后字符串的URL请求URL = Constant.BaseUrl + Constant.Token + getAccessToken()' – MAY3AM

+0

,你可以这样做这个 public void使用GetAccessTokenMethod(){ getAccessToken(new ITokenListener(){ @Override public void onTokenObtained(String accessToken){ final String URL = Constant.BaseUrl + Constant.Token + accessToken + Constant.Limit; \t \t \t //使用这个网址 } }); } 但正如我所说,这是方式之一。 –