Правила AWS Cognito не могут соответствовать встроенному пользовательскому интерфейсу аутентификации, использующему AWS Ampify (Android) - PullRequest
0 голосов
/ 20 февраля 2019

Для упрощения работы с моим приложением я решил использовать AWS Amplify вместо аутентификации в процессе аутентификации.

Вот как мое приложениеAuthenticationActivity выглядит, используя раскрывающуюся авторизацию для Android при создании нового пользователя: Signup Screen

Это код AuthenticationActivity:

package com.aws.tool;

import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import com.amazonaws.mobile.client.AWSMobileClient;
import com.amazonaws.mobile.client.Callback;
import com.amazonaws.mobile.client.SignInUIOptions;
import com.amazonaws.mobile.client.UserStateDetails;

открытый класс AuthenticationActivityextends AppCompatActivity {

private final String TAG = AuthenticationActivity.class.getSimpleName();

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_authentication);

    AWSMobileClient.getInstance().initialize(getApplicationContext(), new Callback<UserStateDetails>() {

        @Override
        public void onResult(UserStateDetails userStateDetails) {
            Log.i(TAG, userStateDetails.getUserState().toString());
            switch (userStateDetails.getUserState()){
                case SIGNED_IN:
                    Intent i = new Intent(AuthenticationActivity.this, MainActivity.class);
                    startActivity(i);
                    break;
                case SIGNED_OUT:
                    showSignIn();
                    break;
                default:
                    AWSMobileClient.getInstance().signOut();
                    showSignIn();
                    break;
            }
        }

        @Override
        public void onError(Exception e) {
            Log.e(TAG, e.toString());
        }
    });
}

private void showSignIn() {
    try {
        AWSMobileClient.getInstance().showSignIn(this,
                SignInUIOptions.builder()
                        .nextActivity(MainActivity.class).build()
        );
    } catch (Exception e) {
        Log.e(TAG, e.toString());
    }
}

}

В моем случае мне нужен только адрес электронной почты + пароль, поэтому эти правила я настроил в AWS Cognito.

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

  • ИМЯ ПОЛЬЗОВАТЕЛЯ
  • Имя
  • Номер телефона

Я пыталсяоставьте эти поля пустыми и зарегистрируйтесь, но я получаю ошибки пользовательского интерфейса, конечно.Если я пытаюсь заполнить все поля, я получаю сообщение об ошибке, указывающее, что я пытаюсь отправить неавторизованные атрибуты в AWS cognito.

UI errors on Signup Screen

Итак, яВернулся к документации по Auth-drop, но я понял, что настроить цвет фона и фоновое изображение можно только при настройке.

Это видно из документации AWS:

https://aws -amplify.github.io / docs / android / authentication # customization

Я не нашел способа отредактировать атрибуты по своему вкусу для простого варианта использования, такого как мой, ипоэтому я вынужден либо:

  1. изменить свои правила AWS Cognito, вынудив меня использовать телефон, атрибут имени и имя пользователя
  2. написать собственный вход в систему / регистрацию

Я что-то упустил?Есть ли способ обойти это?

1 Ответ

0 голосов
/ 20 февраля 2019

@ Ofir Bar - Я полагаю, что вы указали имя пользователя как обязательное поле при создании пула пользователей.Проверьте, что вы выбрали в разделе «Как вы хотите, чтобы ваши конечные пользователи входили?Если вы проверили имя пользователя, то это ожидаемое поведение.и "Какие стандартные атрибуты требуются?"- Снимите все, если вам просто нужен адрес электронной почты и пароль

...