android - AWS Cognito 规则无法匹配使用 aws amplify (Android) 的插入式身份验证 UI
问题描述
为了让我的应用程序暂时保持简单,我决定使用 AWS Amplify 的插入式身份验证流程,而不是创建自己的注册/登录流程。
这是我的应用 AuthenticationActivity 的外观,在创建新用户时使用 Android 的插入式身份验证:
这是 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;
公共类 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 发送未经授权的属性。
所以我回到了 Auth-drop 文档,但我发现只能自定义 drop-in auth 背景颜色和背景图像。
您可以从 AWS 文档中看到它:
https://aws-amplify.github.io/docs/android/authentication#customization
对于像我这样的简单用例,我发现无法根据自己的喜好编辑属性,因此我不得不:
- 更改我的 AWS Cognito 规则,强制我使用电话、姓名属性和用户名
- 编写我自己的登录/注册
我错过了什么吗?有办法解决吗?
解决方案
用户名是强制性的,但是一旦您从控制台更新您的用户池设置以使用电子邮件作为用户名,您可以在用户名字段中指定电子邮件,设置密码并且应该能够在注册时跳过其他字段。
推荐阅读
- c# - HTML 编码 ≥ vs ≥
- kubernetes - 如何在不使用卷的情况下将 ConfigMap 挂载为文件
- bash - 在 find 命令中使用变量不起作用
- vue.js - DOM 操作的 Vue2 Watcher 问题
- react-native - StoryBook:如何测试模态视图?
- java - 何时或应该在 jpa 实体上使用构建器模式?
- typescript - 如何将方法参数限制为元组类型的索引号?
- elasticsearch - elasticsearch中的周期性读取超时错误
- gatsby - 开发模式下源更新后如何强制 gatsby 完全重新加载页面?
- angular - mousemove 事件在角度引发错误