使用 AWS Amplify 身份验证模块禁用用户池的属性

User Pool’s Attributes disabled with AWS Amplify Authentication module

我在我的 angular 项目中使用 CLI 工具链配置了 Amplify 身份验证模块。

现在,我尝试在 Amazon Cognito 控制台中更改我的用户池的属性设置,如 documentation 此处所述:

不幸的是,我看到我的控制台中的所有字段都被禁用了。

它被禁用是因为我在自动设置中遗漏了什么,还是因为现在无法使用 CLI 而我需要提供手动设置?

感谢您的回答,

创建用户池后,无法更改某些参数(删除属性、更改短信验证)。因此,不幸的是,解决方案是小心创建一个新的用户池。 aws有这个问题,也许以后他们会修复它。

无论您是在 AWS 控制台中手动创建用户池还是使用 Amplify CLI(请参阅 here)创建用户池,都无法在创建后更改其属性。

并且似乎无法在 CLI 中配置用户池,以便检查 "Email address or phone number" 单选按钮而不是 "Username" 单选按钮。

因此,如果您想在 运行 Amplify CLI 之后将电子邮件用作 "usernames",您有两个选择:

选项 1

保留所有用户池设置并像这样调用 signUp 方法:

    signup(email, password, email)

第一个参数是用户名,您只需使用电子邮件,第二个参数是密码,第三个参数是电子邮件(可能已被自动设置为 "required" CLI,如果您使用电子邮件验证)。

选项 2

  1. 在 AWS 控制台中手动创建一个新的用户池,并在创建时将属性单选按钮设置为 "Email address or phone number"。

  2. 在您的 main.ts 文件中,用新用户池的相应值覆盖 aws-exports.js 中的 userPoolIduserPoolWebClientId 配置:

    import Amplify from 'aws-amplify';
    import amplify from './aws-exports';
    
    Amplify.configure(amplify);
    Amplify.configure({
      Auth: {
        userPoolId: 'us-east-1_jZIcja1eI',
        userPoolWebClientId: '80e40l0hvvrct4avi3buceekf',
      }
    });
    

    您可以在此处找到这些值:

    • 用户池 ID:

    • 对于 用户池 Web 客户端 ID,创建一个新的应用程序客户端并复制其 ID:

      创建客户端时,一定要取消选择"Generate client secret",否则调用signUp方法时会出现Unable to verify secret hash for client错误:

      应用客户端的名称,您可以随意选择。

差异

使用选项 1(使用用户名登录),理论上您可以拥有多个用户名不同但电子邮件地址相同的用户帐户(没有电子邮件唯一性,只有用户名必须是独一无二)。

使用选项 2(使用电子邮件地址登录),电子邮件地址必须是唯一的,即不能有两个帐户具有相同的电子邮件地址。使用此选项,用户名会自动设置为自动生成的 "sub" 标识符。

尝试使用已存在的用户名(选项 1)或电子邮件地址(选项 2)注册新用户时返回以下 错误

用户名(选项 1):

电子邮件地址(选项 2):

编辑 2019-04-11:

不再需要手动更新配置文件。

在最新版本的CLI中,我们现在可以选择通过Email登录了:


原回答

我发现有一个关于这个主题的 existing issue 提到了一种调整用户池属性的方法。

简单修改文件amplify/backend/auth/<project_name>/<project_name>-cloudformation-template.yml

在行之后:

Type: AWS::Cognito::UserPool
Properties:
  UserPoolName: !Ref userPoolName

添加行:

  UsernameAttributes:
    - 'email'

并使用 amplify push

推送修改