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

Posted

技术标签:

【中文标题】使用 AWS Amplify 身份验证模块禁用的用户池属性【英文标题】:User Pool’s Attributes disabled with AWS Amplify Authentication module 【发布时间】:2019-02-11 09:35:57 【问题描述】:

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

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

很遗憾,我看到控制台中的所有字段都已禁用。

是因为我错过了自动设置中的某些内容,还是因为现在无法使用 CLI 并且我需要提供手动设置而被禁用?

感谢您的回答,

【问题讨论】:

【参考方案1】:

编辑 2019-04-11:

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

在最新版本的 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推送修改

【讨论】:

【参考方案2】:

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

在 CLI 中似乎没有办法配置用户池,以便检查“电子邮件地址或电话号码”单选按钮而不是“用户名”单选按钮。

因此,如果您想在运行 Amplify CLI 后使用电子邮件作为“用户名”,您有两种选择:

选项 1

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

    signup(email, password, email)

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

选项 2

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

    在您的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

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

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

    对于应用客户端的名称,你可以选择任何你想要的。

区别

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

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

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

用户名(选项 1):

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

【讨论】:

选项 2 听起来不错,但是由于您在用户池上创建了 GUID,因此您丢失了用户名【参考方案3】:

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

【讨论】:

以上是关于使用 AWS Amplify 身份验证模块禁用的用户池属性的主要内容,如果未能解决你的问题,请参考以下文章

使用 aws amplify cognito 的自定义身份验证流程

使用 AWS Amplify 对 Google 登录进行身份验证 - federatedSignin 返回 null?

没有当前用户 AWS Amplify 身份验证错误 - 无需登录即可访问

AWS Amplify 与托管 Cognito UI 的联合 Okta 身份验证

AWS Amplify with GraphQL - 按不同类型的用户定义身份验证规则

为 React 自定义 AWS Amplify 身份验证 UI