使用 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
中的userPoolId
和userPoolWebClientId
配置:
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 身份验证