AWS Cognito Android, как сделать поток входа вручную с именем пользователя, паролем - PullRequest
0 голосов
/ 20 мая 2018

Я пытаюсь создать приложение для Android с аутентификацией Amazon Cognito, но не хочу использовать 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-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 голосов
/ 30 мая 2018

Итак, теперь, как вызвать этот обработчик для получения сеанса пользователя 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)
    { 

    }
};
...