使用 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
在 AWS 控制台中手动创建一个新的用户池,并在创建时将属性单选按钮设置为 "Email address or phone number"。
在您的 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:
对于 用户池 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
推送修改
我在我的 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
在 AWS 控制台中手动创建一个新的用户池,并在创建时将属性单选按钮设置为 "Email address or phone number"。
在您的
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:
对于 用户池 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