简体   繁体   English

如何退出aws cognito - android?

[英]How to sign out of aws cognito - android?

So here is the code i used to sign my user into cognito (i hope im correct). 所以这是我用来签署我的用户认知的代码(我希望我正确)。 Now, how would i sign out? 现在,我该如何退出? Currently i have my own signing up process (so no facebook or google yet). 目前我有我自己的注册过程(所以没有Facebook或谷歌)。

 // Callback handler for the sign-in process
    private AuthenticationHandler authenticationHandler = new AuthenticationHandler()
    {
        @Override
        public void onSuccess(CognitoUserSession userSession, CognitoDevice newDevice)
        {
            Log.d(COGNITO_LOGIN,"Login success!");
            cognitoUser.getDetailsInBackground(getDetailsHandler);
            //Now we get user from dynamoDB and store it into a local user object. 
        }
        @Override
        public void getAuthenticationDetails(AuthenticationContinuation authenticationContinuation, String userId)
        {
            Log.d(COGNITO_LOGIN,passwordET.getText().toString());
            // The API needs user sign-in credentials to continue
            AuthenticationDetails authenticationDetails = new AuthenticationDetails(userId, passwordET.getText().toString(), null);

            // Pass the user sign-in credentials to the continuation
            authenticationContinuation.setAuthenticationDetails(authenticationDetails);

            // Allow the sign-in to continue
            authenticationContinuation.continueTask();
        }
        @Override
        public void getMFACode(MultiFactorAuthenticationContinuation multiFactorAuthenticationContinuation) {
            // Multi-factor authentication is required; get the verification code from user
            multiFactorAuthenticationContinuation.setMfaCode("verificationCode");
            // Allow the sign-in process to continue
            multiFactorAuthenticationContinuation.continueTask();
        }
        @Override
        public void authenticationChallenge(ChallengeContinuation continuation) {
        }
        @Override
        public void onFailure(Exception exception)
        {
            // Sign-in failed, check exception for the cause
            Log.d(COGNITO_LOGIN,"Login failed!");
            Log.d(COGNITO_LOGIN,exception.getMessage());
        }
    };
 cognitoUser.getSessionInBackground(authenticationHandler);

There is a way to wipe or clear the session for the current user who logged, the following is the way, which I found so far. 有一种方法可以擦除或清除当前记录的用户的会话,以下是我发现的方法。

This is for fb in federated identities 
  if (fbAccessToken != null) {
                                    LoginManager.getInstance().logOut();
                                }
This is for twiiter 
                                if (mAuthManager != null) {
                                      mAuthManager.clearAuthorizationState(null);
                                }

                                // wipe data
                                CognitoSyncClientManager.getInstance()
                                        .wipeData();

You should be able to just call signOut on a cognitoUser object such as below. 您应该只能在CognitoUser对象上调用signOut,如下所示。 What that does is clear access, id and refresh tokens from the device so you would need to authenticate again. 这样做是从设备清除访问,ID和刷新令牌,因此您需要再次进行身份验证。

// This has cleared all tokens and this user will have to go through the authentication process to get tokens.
user.signOut();

There is also a globalSignOut call that revokes tokens server-side. 还有一个globalSignOut调用撤消令牌服务器端。

CognitoUserPool pool = AwsCognitoHelper.getPool();
if (pool != null) {
    CognitoUser user = pool.getCurrentUser();
    if (user != null) {
        GenericHandler handler = new GenericHandler() {

            @Override
            public void onSuccess() {
            }

            @Override
            public void onFailure(Exception e) {
            }
        };
        user.globalSignOutInBackground(handler);
    }
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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