AWS Cognito принимает любой пароль - PullRequest
0 голосов
/ 14 октября 2018

Я впервые внедряю AWS с приложением Android.

Мы хотели бы использовать Cognito для аутентификации наших пользователей и выборочного предоставления данных из DynamoDB.

Я успешно установилвверх мой пул пользователей и может видеть новые регистрации появляются в списке пользователей.Попытка войти с несуществующей электронной почтой не удалась.

Однако Cognito всегда входит в систему с действительным адресом электронной почты, независимо от введенного пароля .

Что не такс моим процессом?

public class CognitoController extends Application {
    static CognitoUserPool pool;
    static String userEmail;
    public void onCreate(){
        super.onCreate();
        pool = new CognitoUserPool(this,
                "us-east-xxxx",
                "xxxx",
                "xxxx",
                new ClientConfiguration(),
                Regions.US_EAST_1);
    }
}

-

private void actionAdminLogin(){
        UtilityInterfaceTools.hideSoftKeyboard(AdminLoginActivity.this);
        String inputEmail = ((EditText) findViewById(R.id.input_admin_email)).getText().toString();
        String inputPassword = ((EditText) findViewById(R.id.input_admin_password)).getText().toString();
        CognitoController.userEmail = inputEmail;
        details = new AuthenticationDetails(inputEmail, inputPassword, null);

        AuthenticationHandler auther = new AuthenticationHandler() {
            @Override
            public void onSuccess(CognitoUserSession userSession, CognitoDevice newDevice) {
                Toast.makeText(AdminLoginActivity.this, "Congratulations It Works...", Toast.LENGTH_LONG).show();
                startActivity(new Intent(AdminLoginActivity.this, AdminPortalActivity.class));
                finish();
            }

            @Override
            public void getAuthenticationDetails(AuthenticationContinuation continuation, String email) {
                continuation.setAuthenticationDetails(details);
                continuation.continueTask();
            }

            @Override
            public void getMFACode(MultiFactorAuthenticationContinuation continuation) {
                continuation.continueTask();
            }

            @Override
            public void authenticationChallenge(ChallengeContinuation continuation) {
                continuation.continueTask();
            }

            @Override
            public void onFailure(Exception exception) {
                TextView errorMessage = findViewById(R.id.message_invalid_credentials);
                errorMessage.setText(exception.toString());
                errorMessage.setVisibility(View.VISIBLE);
            }
        };
        CognitoController.pool.getUser(inputEmail).getSessionInBackground(auther);
    }

1 Ответ

0 голосов
/ 15 октября 2018

Я думаю, что ваша проблема (которая, кстати, не является проблемой):

  1. В настройках Cognito для вашего пула вы выбрали свои устройства как запоминаемые .

Помнят

устройства также отслеживаются.Во время аутентификации пользователя ключ и секретная пара, назначенные запомненному устройству, используются для аутентификации устройства, чтобы убедиться, что это то же самое устройство, которое пользователь ранее использовал для входа в приложение.API-интерфейсы для просмотра запомненных устройств были добавлены в новые выпуски Android, iOS и JavaScript SDK.Вы также можете увидеть запомненные устройства из консоли Amazon Cognito.

Токен уже кэширован :

Кэширование

Mobile SDK для Android кэширует последнего успешно аутентифицированного пользователя и токены пользователя локальнона устройстве, в SharedPreferences.SDK также предоставляет методы для получения последнего успешно аутентифицированного пользователя.

Обновление вашего приложения

Фактически, для лучшего взаимодействия с пользователем вы хотите, чтобы пользователь использовал приложение, и не нужно входить в систему каждый раз, когдаона хочет использовать ваше приложение (например, посмотреть почтовые приложения, приложения для социальных сетей и т. д.).Однако ваше приложение должно справиться с этим, у вас есть два варианта здесь:

  1. Перенаправить на вход в систему, если необходимо: Если пользователь уже вошел в систему и хочет использоватьприложение снова, ваше приложение должно проверить пользователя по пулу пользователей Cognito, и только затем перенаправить пользователя на страницу входа в систему, если это необходимо.

  2. Удалить токен : Если вы действительно хотите, чтобы пользователь входил в систему каждый раз, когда она использует приложение, то удалите токен, если пользователь выходит из системы;но я не рекомендую это ради удобства пользователей.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...