如何修改AWS Cognito发送的邮箱验证码过期时间
AWS Cognito自定义邮箱验证码有效期实现方案
核心结论:Cognito原生注册流程自带的6位邮箱验证码没有开放有效期修改配置,默认24小时有效期是服务端固定参数,你翻遍官方文档也找不到对应配置项,因为这个能力根本没对外暴露。
具体实现步骤(可满足10分钟有效期要求)
- 第一步:关闭原生自动验证逻辑
进入对应Cognito用户池的注册配置页面,找到「自动验证」设置板块,取消邮箱选项的勾选,让Cognito不再自动发送内置验证码、不再自动处理校验逻辑。 - 第二步:用预注册触发器接管验证码生成、存储、发送全流程
给用户池绑定Pre Sign-up(预注册)Lambda触发器,在自定义的Lambda函数里实现以下逻辑:- 拦截到用户注册请求后,自行生成6位数字验证码
- 把验证码和用户邮箱、注册事件的对应关系存入支持自动过期的存储介质(比如带TTL规则的DynamoDB、Redis),过期时间明确设置为600秒(即10分钟)
- 调用Amazon SES或者你方自用的邮件发送服务,将验证码投递到用户填写的邮箱
- 函数返回结果时设置
autoConfirmUser = false,阻止Cognito自动确认用户账号
- 第三步:自行实现校验逻辑完成账号确认
在你的业务服务端单独开发验证码提交接口:- 接收用户传入的邮箱、收到的验证码参数
- 去之前存验证码的存储里查询对应记录,校验验证码是否匹配、是否超出10分钟有效期
- 校验全部通过后,调用Cognito的
AdminConfirmSignUp接口,把对应用户的账号标记为已确认、邮箱标记为已验证,走完整个注册流程
避坑提示:别用「自定义邮件发送触发器(Custom email sender)」做这个需求。这个触发器只能替换Cognito原生验证码的发件渠道和邮件模板,Cognito服务端存的验证码有效期还是固定24小时,就算你在邮件里写了10分钟过期,用户24小时内输对验证码照样能通过校验,根本卡不住时效。
- 可选优化:如果需要做验证码重发功能,直接在业务层实现即可,用户触发重发时重新生成验证码、覆盖存储里的旧记录、重置10分钟有效期后重新发邮件,灵活度比Cognito原生的重发规则高很多。
内容的提问来源于stack exchange,提问作者Ashish chandande
相关产品推荐
相关产品推荐

