通过AWS Amplify Authentication模块禁用了用户池的属性

时间:2018-09-06 07:28:52

标签: angular authentication amazon-cognito aws-amplify

我在我的角度项目中使用CLI工具链配置了Amplify Authentication模块。

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

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

是因为我错过了自动设置中的某些功能还是因为现在无法使用CLI且需要提供手动设置而将其禁用了吗?

感谢您的回答,

3 个答案:

答案 0 :(得分:7)

编辑2019-04-11:

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

在最新版的CLI中,我们现在可以选择通过电子邮件登录:

AWS CLI


原始答案

我发现有一个关于该主题的existing issue,其中提到了一种适应用户池属性的方法。

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

行后:

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

添加行:

  UsernameAttributes:
    - 'email'

并使用amplify push

推送修改

答案 1 :(得分:6)

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

并且在CLI中似乎无法配置用户池,因此无法选中“电子邮件地址或电话号码”单选按钮,而不是“用户名”。

因此,如果要在运行Amplify CLI之后将电子邮件用作“用户名”,则有两个选择:

选项1

将所有用户池设置保持不变,并像这样调用signUp方法:

    signup(email, password, email)

第一个参数是用户名,您只需使用电子邮件,第二个参数是密码,第三个参数是电子邮件(如果您将CLI设置为“ required”,使用电子邮件验证)。

选项2

  1. 在AWS控制台中手动创建一个新用户池,并在创建时将属性单选按钮设置为“电子邮件地址或电话号码”。

    enter image description here

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

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

    您可以在此处找到值:

    • 用户池ID

      enter image description here

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

      enter image description here

      创建应用客户端时,请确保取消选择“生成客户端密码”,否则在调用Unable to verify secret hash for client方法时将出现signUp错误:

      enter image description here

      对于应用程序客户端的名称,您可以选择任何想要的内容。

差异

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

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

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

以下错误

用户名(选项1):

enter image description here

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

enter image description here

答案 2 :(得分:0)

创建用户池后,无法更改某些参数(删除属性,更改sms身份验证)。因此,不幸的是,解决方案是仔细创建新的用户池。 Aws有这个问题,也许将来会解决。