为了暂时简化我的应用程序,我决定使用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文档,但是我发现只能自定义插入式auth背景颜色和背景图片。
您可以从AWS文档中看到它:
https://aws-amplify.github.io/docs/android/authentication#customization
对于像我这样的简单用例,我没有办法根据自己的喜好来编辑属性,因此我被迫选择其中一种:
我想念什么吗?有办法解决吗?
答案 0 :(得分:0)
@Ofir Bar-我相信您在创建用户池时已将用户名设置为必填字段。 检查您在该部分下的选择 “您希望最终用户如何登录?”如果您已检查用户名,则这是预期的行为。 和 “需要哪些标准属性?” -如果您只需要电子邮件和密码,请取消选中所有内容
答案 1 :(得分:0)
用户名是必填项,但是一旦您从控制台更新了用户池设置以使用电子邮件作为用户名,则可以在用户名字段中指定电子邮件,设置密码,并且应该能够在注册时跳过其他字段。