首页 > 解决方案 > AWS cognito android如何使用用户名,密码进行手动登录流程

问题描述

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

但是,我找不到任何关于如何做到这一点的参考资料、示例、示例、博客。

我尝试在https://docs.aws.amazon.com/aws-mobile/latest/developerguide/tutorial-android-aws-mobile-notes-auth.html遵循手册

& 我可以使用默认的 AuthUI 成功登录。

现在,要使用用户名、密码登录,我从这个参考中创建了一个这样的身份验证处理程序 - https://aws.amazon.com/blogs/mobile/using-android-sdk-with-amazon-cognito-your-user-游泳池/

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 用户会话和详细信息

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

标签: androidamazon-web-servicesauthenticationamazon-cognitoaws-cognito

解决方案


那么,现在如何调用这个处理程序来获取 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)
    { 

    }
};

推荐阅读