You need to enable JavaScript to run this app. Serverless部署的AWS Cognito注册接口未触发验证确认邮件发送
优惠活动
大模型
产品
解决方案
定价
更多

Serverless部署的AWS Cognito注册接口未触发验证确认邮件发送

问题排查方案

你遇到的控制台手动创建用户发信正常、公开API注册无验证邮件的核心原因是:两套操作走Cognito完全独立的用户创建流程,邮件触发逻辑互不共享,不存在全局邮件配置生效后两边都会自动触发的机制。

具体按以下顺序定位问题:

  • 检查SignUp请求的必填参数缺失
    你当前的请求报文中没有携带UserAttributes字段。很多人会踩这个坑:以为把邮箱设为用户名属性(UsernameAttributes: - email),SignUp的时候把邮箱填在Username字段里,系统就会自动同步成用户属性的邮箱。实际上Cognito的公开SignUp接口根本不做这个映射,哪怕你开了邮箱自动验证,只要你没显式把邮箱写到UserAttributes里,系统就识别不到这个用户有邮箱属性,自然不会触发验证邮件。
    你需要将SignUp的请求体调整为包含对应属性的结构:
    {
        "ClientId": "你的应用客户端ID",
        "Username": "注册邮箱",
        "Password": "设置的用户密码",
        "UserAttributes": [
            {"Name": "email", "Value": "注册邮箱"}
        ],
        "ValidationData": null
    }
    
  • 检查用户池客户端的权限配置
    首先确认你请求里的ClientId对应的是公共客户端,也就是没有开启客户端密钥(Client Secret)的类型——SignUp是面向终端用户的公开接口,不支持带密钥的机密客户端。
    其次在serverless.yml中,和你定义的CognitoUserPool绑定的UserPoolClient资源,需要在ExplicitAuthFlows字段中配置允许公开注册的认证流程,示例配置:
    ExplicitAuthFlows:
      - ALLOW_USER_SRP_AUTH
      - ALLOW_USER_PASSWORD_AUTH
      - ALLOW_REFRESH_TOKEN_AUTH
      - ALLOW_CUSTOM_AUTH
    
    如果缺少ALLOW_USER_PASSWORD_AUTH权限,即使接口能成功创建用户,也可能跳过属性验证的邮件触发逻辑。
  • 排查是否存在自动跳过验证的触发器配置
    如果你给用户池绑定了PreSignUp类型的Lambda触发器,需要检查触发器代码中是否存在将autoConfirmUser设为true的逻辑。这类配置会让用户创建后直接进入CONFIRMED状态,系统自然不会发送验证邮件。
    你可以在Cognito控制台对应用户池的用户列表中,找到通过API注册的测试用户,核对用户状态:

    若状态为CONFIRMED,说明用户被自动完成验证,流程已经走到了已激活阶段,不存在发信环节;若状态为UNCONFIRMED,则为请求参数缺失导致的邮件未触发。

  • 核对独立的邮件发送规则配置
    Cognito中两类场景的邮件发送开关是完全独立的:控制台手动创建用户触发的是「管理员创建用户邀请」类的邮件规则,公开注册触发的是「新用户注册验证」类的独立邮件规则。你需要在用户池的消息自定义模块中,确认没有把「新用户注册验证」类的邮件设置为不发送。

内容的提问来源于stack exchange,提问作者Michał Miler

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.27 22:27:04