You need to enable JavaScript to run this app. AdminCreateUser场景下Cognito PreSignUp的autoVerifyEmail不生效
优惠活动
大模型
产品
解决方案
定价
更多

AdminCreateUser场景下Cognito PreSignUp的autoVerifyEmail不生效

根因分析

问题由两个独立的配置/代码错误共同导致,按影响优先级排序:

1. 用户属性值类型错误(手动更新无效的核心原因)

Cognito 所有用户属性的Value字段 仅接受字符串类型,不支持 Python 原生布尔值。调用admin_update_user_attributes时传入'Value': True会被 Cognito 静默忽略,不会触发任何属性更新。

2. PreSignUp 触发器参数的生效边界问题

PreSignUp 触发器的autoVerifyEmail、autoVerifyPhone参数存在明确的生效范围限制:

  • 当触发器的triggerSource为PreSignUp_AdminCreateUser(即管理员创建用户流程)时,autoConfirmUser参数正常生效,但autoVerifyEmail这类邮箱/手机号自动验证参数 不会自动覆盖用户属性中的email_verified标记,仅对用户主动走公共注册流程的场景生效。
  • 额外隐蔽限制:调用admin_create_user时未显式传入email_verified属性,Cognito 会默认将新建管理员用户的该属性设为false,即使触发器返回autoVerifyEmail: true(无论布尔值还是字符串形式)也会被覆盖。

可落地的解决方案

无需依赖 PreSignUp 触发器的自动验证逻辑,直接在创建用户时显式指定验证属性即可,这是管理员创建用户场景的标准实现:

修正后的 admin_create_user 调用代码

self.cognito.admin_create_user(
    UserPoolId=self.user_pool_id,
    Username=user.username,
    UserAttributes=[
        {
            'Name': 'name',
            'Value': user.username
        },
        {
            'Name': 'email',
            'Value': user.username
        },
        # 显式指定邮箱已验证,值必须为字符串类型
        {
            'Name': 'email_verified',
            'Value': 'true'
        },
    ],
    MessageAction='SUPPRESS'
)

修正后的 admin_update_user_attributes 调用代码(用于存量用户修正)

self.cognito.admin_update_user_attributes(
    UserPoolId=self.user_pool_id,
    Username=user.username,
    UserAttributes=[
        {
            'Name': 'email_verified',
            'Value': 'true'
        },
    ]
)

额外注意事项

  • 如果用户池同时开启了手机号验证需求,需要同步显式指定phone_number_verified属性为'true',避免触发未验证标记。
  • PreSignUp 触发器中的autoVerifyEmail参数可以保留,但仅对用户主动注册的场景生效,不要依赖它处理管理员创建的用户属性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.25 15:36:04