2016-05-13 12 views
0

Ich werde ein Login-System mit OAuth2.0 für meine app machen, ist alles richtig, bis Reichweite abgelaufen Token!OAuth Auto Refresh Token, wenn Token abgelaufen ist

Für diesen Abschnitt schrieb ich diese Methode:

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

      } 
     }); 

    } 

} 

Wie Sie sehen können, kehre ich Zugriffstoken Speicher in meiner app prefrences geteilt, wenn nicht abgelaufen ist, aber wenn abgelaufen war, ich mache Refresh Request (Volley + Gson), um das frisch zu machen.

Aber ich kann nicht accessToken von inneren Klasse erreichen :(

Wie ich String von dieser Methode zurückgeben kann?

Antwort

1

Zuhörer Mit einer Art und Weise ist es, dieses Problem zu beheben.

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

Seine Es hilft nicht, weil ich '.getAccessToken() 'verwenden werde, um Token an das Ende meiner Anfrage-URL anzuhängen, wie' final String URL = Constant.BaseUrl + Constant.Token + getAccessToken() ' – MAY3AM

+0

kann man sowas tun diese öffentlichen void usingGetAccessTokenMethod() { getAccessToken (neu ITokenListener() { @Override public void onTokenObtained (String accessToken) { final String URL = Constant.BaseUrl + Constant.Token + accessToken + Constant.Limit; \t \t \t // Verwenden Sie die URL hier } }); } aber wie gesagt, das ist einer der Weg. –

Verwandte Themen