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

如何禁用Cognito默认验证邮件 仅存储验证码至数据库

问题解答

仅修改CustomMessage触发器返回的response字段,无法可靠阻止Cognito发送默认邮件,而且你当前的代码本身就拿不到真实的验证码,存到数据库的内容是无效的。


你当前方案的两个核心问题

  • 第一,你存的不是真验证码:event.request.codeParameter拿到的{####}是Cognito的模板占位符,不是实际生成的6位验证码。Cognito不会把真实验证码明文传给CustomMessage触发器,只会在渲染邮件内容时自动替换这个占位符,你现在存到库里的字符串完全没法用于后续自定义发信。
  • 第二,CustomMessage触发器的设计用途是自定义邮件/短信的内容模板,不是用来禁用发信的:
    • 如果你返回的response.emailSubject、response.emailMessage为null(就是你现在的返回结果),Cognito会直接调用内置默认模板发信,也就是你现在遇到的情况
    • 就算你把这两个字段强行设为空字符串,不同区域的Cognito行为不一致,要么发空邮件,要么直接抛错,不属于官方支持的可控方案。

正确实现方式

要实现「存验证码+完全禁止Cognito自动发默认邮件」的需求,不要用CustomMessage触发器,改用自定义邮件发送者(Custom Email Sender)触发器,流程如下:

  1. 进入Cognito用户池的触发器配置页,找到「自定义发送者」分类,绑定一个新的Lambda作为自定义邮件发送触发器
  2. 给这个Lambda配置对应KMS密钥的解密权限:Cognito传给这个触发器的验证码是KMS加密后的密文,你需要调用KMS解密接口才能拿到真实的验证码明文
  3. 在这个Lambda里写你的业务逻辑:
    • 解密拿到真实验证码、用户属性、触发场景(注册/忘记密码等)
    • 把用户ID、验证码、场景类型存入你的数据库
    • 不需要执行任何邮件发送操作,直接返回即可,Cognito不会再自动发送任何默认验证邮件。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 06:57:20