繁体   English   中英

通过 AWS Amplify 使用用户名或唯一 email 进行 Cognito 身份验证

[英]Cognito authentication with username or unique email via AWS Amplify

使用 Cognito 用户池放大 CLI 身份验证目前有两种主要模式,使用用户名或使用 email 登录。在前一种情况下,email 的唯一性作为必需的用户属性没有被强制执行。

Cognito 服务本身支持“还允许使用经过验证的 email 地址登录”选项(AWS 控制台,用户池属性部分),但它只能在创建用户池时设置(即以后无法修改 - 复选框被禁用)。 是否可以在允许用户使用用户名或 email 进行身份验证的同时强制用户池中没有重复的电子邮件?

总而言之,我的用例需要:

  • 通过 Amplify 的Auth.SignUp注册用户时,在 Cognito 级别验证/强制执行 email 属性唯一性;
  • 保持基于用户名的登录,但也允许用户使用他们的 email 登录(即, Auth.SignIn使用 email 或作为用户名参数提供的用户名)。

当您使用amplify add auth添加用户池时,选择“用户名”作为您希望用户在出现提示时登录的方法。

如果系统未提示您选择此选项,您可能需要再次尝试amplify add auth ,但这次在开始时出现提示时选择手动配置。

通过amplify add auth完成整个身份验证设置后,在第一次运行amplify push之前,运行amplify override auth

这将创建一个新的override.ts文件,您可以使用 AWS CDK 代码编辑该文件,以自定义超出 CLI 允许的能力的 Cognito 资源。
您可以在以下位置找到override.ts文件:
amplify\backend\auth\<your_app_name>\override.ts

在覆盖文件中,将以下行添加到为您创建的空 function 中:
resources.userPool.aliasAttributes = ['email'];

现在您可以保存文件,并运行amplify push ,希望您的新用户池将在 AWS 控制台中显示您已成功配置它以允许用户名和 email 一起登录。

您必须确保在amplify push之前编写覆盖代码,否则您的用户池将在云中创建,并且在创建用户池后尝试覆盖此登录功能会引发错误,因为它是只读的。

如果你发现自己在那个 position 中,你将需要创建一个新的用户池,你不能修改现有的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM