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

为Cognito配置PreSignUp Lambda后,邮箱验证功能突然失效

AWS Cognito自动邮箱验证添加PreSignUp触发器后失效问题

问题描述

配置了AutoVerifiedAttributes: ["email"]的Cognito用户池,在添加PreSignUp Lambda触发器后,自动邮箱验证功能失效。Lambda控制台显示触发器已成功交付执行,但用户注册时无法收到验证邮件。

复现步骤

  • 用户池通过IaC配置AutoVerifiedAttributes包含email,此时自动邮箱验证功能正常工作。
  • 使用以下PowerShell命令为用户池绑定PreSignUp Lambda触发器:
$stackName = "xxx"

# 一键获取UserPoolId和LambdaArn并执行触发器更新脚本
.\Update-UserPoolTrigger.ps1 -UserPoolId $(aws cloudformation describe-stacks --stack-name $stackName --query "Stacks[0].Outputs[?ExportName=='$stackName-UserPoolId'].OutputValue" --output text) -LambdaArn $(aws cloudformation describe-stacks --stack-name $stackName --query "Stacks[0].Outputs[?ExportName=='$stackName-PreSignUpLambdaArn'].OutputValue" --output text)
  • 用户尝试注册账号,观察到邮箱验证流程未触发,无验证邮件发送。

原因分析

PreSignUp Lambda触发器的返回值会覆盖Cognito的默认行为。如果Lambda函数没有明确返回autoVerifyEmail: true,即使用户池配置了AutoVerifiedAttributes,Cognito也不会执行自动邮箱验证流程。Lambda执行成功仅代表代码运行无错误,不代表返回了正确的触发配置。

解决方案

修改PreSignUp Lambda函数,确保返回的event.response对象中包含autoVerifyEmail: true字段,示例代码如下:

Node.js示例

exports.handler = async (event) => {
    // 保留你的业务逻辑(如自定义验证、用户属性设置等)
    
    // 显式开启自动邮箱验证
    event.response.autoVerifyEmail = true;
    
    return event;
};

Python示例

def lambda_handler(event, context):
    # 保留你的业务逻辑
    
    # 显式开启自动邮箱验证
    event['response']['autoVerifyEmail'] = True
    
    return event

修改后重新部署Lambda函数,再次测试注册流程,Cognito将恢复自动发送邮箱验证邮件的功能。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 22:42:45