为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
相关产品推荐
相关产品推荐

