android - AWS Cognito 规则无法匹配使用 aws amplify (Android) 的插入式身份验证 UI

标签 android amazon-web-services amazon-cognito aws-amplify

为了让我的应用程序暂时保持简单,我决定使用 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;

公共(public)类 AuthenticationActivity 扩展 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 上设置的规则。

但是,您可以看到我有一些由嵌入式身份验证 UI 生成的额外属性:

  • 用户名
  • 名字
  • 电话号码

我试图将这些字段留空并注册,但我当然会遇到 UI 错误。 如果我尝试填写所有字段,我会收到一条错误消息,表明我正在尝试将未经授权的属性发送到 AWS cognito。

UI errors on Signup Screen

所以我回到了 Auth-drop 文档,但我发现只能自定义 drop-in auth 背景颜色和背景图像。

可以从AWS文档中看到:

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

对于像我这样的简单用例,我发现无法根据自己的喜好编辑属性,因此我不得不:

  1. 更改我的 AWS Cognito 规则,强制我使用电话、名称属性和用户名
  2. 编写我自己的登录/注册

我错过了什么吗?有解决办法吗?

最佳答案

用户名是强制性的,但是一旦您从控制台更新您的用户池设置以使用电子邮件作为用户名,您就可以在用户名字段中指定电子邮件,设置密码并且应该能够在注册时跳过其他字段。

关于android - AWS Cognito 规则无法匹配使用 aws amplify (Android) 的插入式身份验证 UI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54776904/

相关文章:

android - 将 Pushe unity 插件添加到我的 Android 应用程序时出错

java - 如何删除谷歌加按钮消息?

amazon-web-services - AWS IAM 用户 - 限制 EC2 实例数量并限制 EBS 存储

java - 概念问题 - 具有选择性输入的文本框

java - Android Wear 无法唤醒屏幕

amazon-web-services - AWS Cognito : Email verification with Link

node.js - 亚马逊 EC2 Ubuntu 实例 : Where should I upload the files to access them from the browser?

amazon-web-services - 用户池和联合身份

amazon-web-services - 单点登录: Microsoft 365 not asking to pick an account

ios - 您如何快速实现 AWS 开发人员身份验证?