首页 文章

AWS cognito android如何用用户名,密码手动登录流程

提问于
浏览
0

我正在尝试使用Amazon Cognito身份验证构建Android应用程序,但不希望使用默认的AuthUI登录用户 .

但是,我找不到任何关于如何做到的参考,样本,示例和博客 .

我试着按照这里的手册进行操作https://docs.aws.amazon.com/aws-mobile/latest/developerguide/tutorial-android-aws-mobile-notes-auth.html

我能够使用默认的AuthUI成功登录 .

现在,要使用用户名,密码登录,我从这个引用中创建了一个这样的Authentication Handler - https://aws.amazon.com/blogs/mobile/using-android-sdk-with-amazon-cognito-your-user-pools/

AuthenticationHandler handler = new AuthenticationHandler() {
    @Override
    public void onSuccess(CognitoUserSession userSession, CognitoDevice newDevice) {

    }

    @Override
    public void getAuthenticationDetails(AuthenticationContinuation authenticationContinuation, String userId) {
        AuthenticationDetails authenticationDetails = new AuthenticationDetails(mEmailEditText.getText().toString(), mPasswordEditText.getText().toString(), null);
        authenticationContinuation.setAuthenticationDetails(authenticationDetails);
        authenticationContinuation.continueTask();
    }

    @Override
    public void getMFACode(MultiFactorAuthenticationContinuation continuation) {

    }

    @Override
    public void authenticationChallenge(ChallengeContinuation continuation) {

    }

    @Override
    public void onFailure(Exception exception) {

    }
};

那么,现在如何调用此处理程序来获取Cognito用户会话和详细信息

任何人都可以分享适当的指示来完成这项工作或任何其他方式可以做到这一点?

1 回答

  • 0

    那么,现在如何调用此处理程序来获取Cognito用户会话和详细信息

    您需要先初始化 CognitoUser 对象并调用 getSessionInBackground()

    检查下面的代码,调用 login() 以用户名,密码登录 . 并确保 build.gradle 导入所需的AWS库:

    import com.amazonaws.mobile.client.AWSMobileClient;
    import com.amazonaws.mobile.config.AWSConfiguration;
    import com.amazonaws.mobileconnectors.cognitoidentityprovider.CognitoDevice;
    import com.amazonaws.mobileconnectors.cognitoidentityprovider.CognitoUser;
    import com.amazonaws.mobileconnectors.cognitoidentityprovider.CognitoUserPool;
    import com.amazonaws.mobileconnectors.cognitoidentityprovider.CognitoUserSession;
    import com.amazonaws.mobileconnectors.cognitoidentityprovider.continuations.AuthenticationContinuation;
    import com.amazonaws.mobileconnectors.cognitoidentityprovider.continuations.AuthenticationDetails;
    import com.amazonaws.mobileconnectors.cognitoidentityprovider.continuations.ChallengeContinuation;
    import com.amazonaws.mobileconnectors.cognitoidentityprovider.continuations.MultiFactorAuthenticationContinuation;
    import com.amazonaws.mobileconnectors.cognitoidentityprovider.handlers.AuthenticationHandler;
    
    // ...
    
    private EditText mEmailEditText;
    private EditText mPasswordEditText;
    
    private String email;
    private String password;
    
    // ...
    
    private void login()
    {
        email = mEmailEditText.getText().toString(); // email
        password = mPasswordEditText.getText().toString(); // password
        if (email.isEmpty() || password.isEmpty())
        {
            return;
        }
    
        final AWSConfiguration awsConfiguration = AWSMobileClient.getInstance().getConfiguration();
        final CognitoUserPool userPool = new CognitoUserPool(this, awsConfiguration);
        final CognitoUser user = userPool.getUser(email); // Create a User Object with a UserId
        user.getSessionInBackground(authenticationHandler);
    }
    
    private AuthenticationHandler authenticationHandler = new AuthenticationHandler()
    {
        @Override
        public void onSuccess(final CognitoUserSession userSession, final CognitoDevice newDevice)
        {
          // Login success, do startActivity() or other thing
        }
    
        @Override
        public void getAuthenticationDetails(final AuthenticationContinuation continuation, final String userId)
        {
            if (userId != null)
            {
                email = userId;
            }
    
    
            final AuthenticationDetails authDetails = new AuthenticationDetails(email, password, null);
            continuation.setAuthenticationDetails(authDetails);
            continuation.continueTask();
        }
    
        @Override
        public void getMFACode(final MultiFactorAuthenticationContinuation continuation)
        {
        }
    
        @Override
        public void authenticationChallenge(final ChallengeContinuation continuation)
        {
        }
    
        @Override
        public void onFailure(final Exception exception)
        { 
    
        }
    };
    

相关问题