Cognito密码重置未触发CustomMessage_ForgotPassword Lambda问题排查
Cognito CustomMessage_ForgotPassword 事件未触发问题解决方案
问题场景
你调用密码重置的代码如下:
import Auth from "@aws-amplify/auth"; ... Auth.forgotPassword(username);
调用后返回成功响应,返回数据如下:
{CodeDeliveryDetails: {…}} CodeDeliveryDetails: AttributeName: "email" DeliveryMedium: "EMAIL" Destination: "k***@g***.com" [[Prototype]]: Object [[Prototype]]: Object
你的Amplify配置符合官方要求:
Amplify.configure({ Auth: { mandatorySignIn: true, region: secrets.cognito.region, userPoolId: secrets.cognito.poolId, userPoolWebClientId: secrets.cognito.webClientId, oauth: { domain: "auth.domain.com", }, }, });
目前已确认CustomMessage_SignUp事件可以正常触发自定义Lambda,但CustomMessage_ForgotPassword事件未被触发,且此前流程正常,未修改过代码和Cognito配置,可按以下顺序排查问题:
- 先重新绑定Lambda触发器:AWS控制台偶尔会出现配置同步异常的情况,你可以先进入Cognito用户池的「触发器」配置页,解绑CustomMessage对应的Lambda,重新选择目标Lambda后保存,等待2-3分钟再测试触发。
- 检查Lambda调用日志:你以为的未触发可能实际是Lambda被调用后抛出异常直接终止,你可以进入对应Lambda的CloudWatch日志页,筛选密码重置请求对应时间点的日志,确认是否有调用记录、报错信息。
- 检查Lambda权限配置:确认Lambda的资源策略允许Cognito服务调用,若Lambda近期被修改了VPC配置,需要确保Lambda有公网访问能力,或已经配置了Cognito的VPC端点,否则Cognito无法正常触发Lambda。
- 检查Amplify依赖版本:若你项目的依赖没有锁版本,可能构建时自动升级了
@aws-amplify/auth版本,部分版本的forgotPassword接口逻辑存在变更会跳过自定义消息触发,你可以回退到之前流程正常时的版本再测试。 - 检查用户池消息配置:进入Cognito用户池的「消息定制」页,确认密码重置邮件的发送选项为使用自定义Lambda触发器,而非默认内置模板,AWS后台偶尔会出现配置默认值被覆盖的异常。
- 检查CloudTrail日志:搜索CloudTrail中的
ForgotPassword事件,查看事件详情中是否有Lambda调用失败的记录,若用户状态异常(如未验证、被禁用)也可能导致触发器跳过。
内容的提问来源于stack exchange,提问作者bkr879
相关产品推荐
相关产品推荐

