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

Cognito自助注册未收集邮箱致验证失败问题求助

解决思路

1. 自建注册表单,调用Cognito SignUp API提交邮箱信息

默认托管UI的字段由用户池必填属性决定,既然无法修改必填属性,可通过自建前端表单收集邮箱,再调用Cognito的SignUp接口完成注册:

  • 前端创建包含用户名、密码、邮箱的表单
  • 使用AWS SDK或Amplify库调用signUp方法,传入用户名、密码的同时,在userAttributes参数中指定邮箱字段
  • 示例代码(JavaScript):
import { Auth } from 'aws-amplify';

async function handleSignUp(username, password, email) {
  try {
    const { user } = await Auth.signUp({
      username,
      password,
      attributes: {
        email: email
      }
    });
    // 注册成功后引导用户进入邮箱验证环节
    console.log('注册成功,用户信息:', user);
  } catch (error) {
    console.error('注册失败:', error);
  }
}

调用该接口后,Cognito会自动向目标邮箱发送验证邮件,用户完成验证后状态将变为Confirmed,不会出现之前的错误跳转。

2. 配置预注册Lambda触发器,强制注册时传入邮箱

为避免通过默认托管UI跳过邮箱收集,可给用户池添加预注册(Pre Sign-up)Lambda触发器,在注册前检查请求是否包含邮箱属性,无则拒绝注册:

  • 触发器逻辑示例(Node.js):
exports.handler = async (event) => {
  if (!event.request.userAttributes.email) {
    throw new Error('注册必须提供邮箱地址');
  }
  event.response.autoConfirmUser = false; // 保留邮箱验证逻辑
  return event;
};

配置后,默认托管UI因未传邮箱会直接返回错误,只有自建表单传入邮箱才能完成注册流程。

3. 尝试调整托管UI自定义字段(可选)

虽然无法修改必填属性,可尝试在用户池的App client settings中,添加自定义属性到托管UI的注册表单,但该方法依赖Cognito版本支持,优先级低于前两种方案。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 20:12:12