You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何创建仅以用户名登录的AWS Cognito用户池?规避必填邮箱/电话要求

AWS Cognito 绕过邮箱/手机号必填限制的办法

2024年11月AWS Cognito更新后,默认要求用户池至少配置一个验证联系属性(邮箱或手机号),但你还是能继续只用用户名登录,以下是具体方案:

1. 用预注册Lambda触发器自动填虚拟值

  • 新建一个预注册(Pre Sign-up)Lambda触发器,用户注册时自动给邮箱/手机号填充虚拟值(比如no-reply@yourapp.com或+00000000000),就能绕开必填校验。
  • 示例Node.js代码:
exports.handler = async (event) => {
  // 自动补全虚拟邮箱,跳过必填要求
  if (!event.request.userAttributes.email) {
    event.request.userAttributes.email = 'no-reply@yourapp.com';
    event.request.userAttributes.email_verified = 'true'; // 标记已验证,省去后续验证步骤
  }
  return event;
};
  • 注意:需在用户池属性配置中将邮箱/手机号设为必填,依赖Lambda自动填充后,前端无需收集这些信息。

2. 调整用户池登录配置

  • 进入AWS Cognito控制台,打开目标用户池的「登录体验」配置:
    • 选择「仅用户名」作为登录选项;
    • 在「验证联系属性」部分,取消勾选「要求验证联系属性」(若该选项可见);
    • 前往「属性」配置,将邮箱和手机号设为可选。部分地区的用户池可能因合规要求强制保留至少一个联系属性,此时结合Lambda方案即可。

3. 后端通过AdminCreateUser API创建用户

  • 如果你的用户由后端管控创建(而非前端自助注册),直接调用AdminCreateUser API即可,无需传入邮箱或手机号。
  • AWS CLI示例命令:
aws cognito-idp admin-create-user \
  --user-pool-id 你的用户池ID \
  --username 目标用户名 \
  --temporary-password TempPass123!
  • 这种方式不受前端注册表单的必填限制,适合后台统一管理用户的场景。

若部分区域用户池因合规要求强制保留联系属性,Lambda填充虚拟值是最可靠的方案,注意确保虚拟值不会与真实用户信息冲突。

内容的提问来源于stack exchange,提问作者Pasindu Chinthana

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 11:21:00