繁体   English   中英

OAuth自动刷新令牌(如果令牌已过期)

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM