AWS Cognito过期临时密码重置:如何自定义邮件而非默认邮件?
AWS Cognito 过期账户重置与自定义邮件方案
问题背景
通过AdminCreateUser API创建的Cognito用户,若未在临时密码有效期(7天)内登录,登录时会报错:
用户账户已过期,必须由管理员重置。
当前删除重创建用户的方式效率低下,现需解决两个需求:要么仅重置账户过期限制,要么在使用AdminCreateUser+MessageAction=RESEND时发送自定义邮件。
可行解决方案
1. 仅重置账户过期限制(不发送默认邮件)
使用AdminSetUserPassword API替代低效的删除重创建操作:
- 调用时传入目标用户名,设置
Permanent=false(生成新的临时密码) - 同时指定
MessageAction=SUPPRESS,避免Cognito发送默认邮件 - 该操作会直接重置用户账户的过期状态,生成新的临时密码,之后你可通过自有渠道(如内部邮件服务)将新临时密码发送给用户
示例调用参数(伪代码):
adminSetUserPassword({ UserPoolId: '你的用户池ID', Username: '目标用户名', Password: '可指定临时密码,或留空让Cognito自动生成', Permanent: false, MessageAction: 'SUPPRESS' })
2. 使用RESEND时发送自定义邮件
通过Cognito的自定义消息Lambda触发器拦截并替换默认邮件内容:
- 在AWS Lambda控制台创建处理自定义消息的函数
- 在Cognito用户池的「触发器」设置中,启用「自定义消息」触发器并关联该Lambda函数
- 在Lambda函数中,判断事件的
triggerSource为CustomMessage_AdminCreateUser(对应RESEND触发的邀请场景),修改返回的邮件主题和正文为自定义内容
示例Lambda代码片段:
exports.handler = (event, context, callback) => { if (event.triggerSource === 'CustomMessage_AdminCreateUser') { // 自定义邮件主题 event.response.emailSubject = '你的账户激活通知'; // 自定义邮件正文,通过event.request.codeParameter获取临时密码 event.response.emailMessage = `您好,你的临时登录密码是:${event.request.codeParameter},请在7天内登录并修改密码。`; } callback(null, event); };
设置完成后,调用AdminCreateUser+MessageAction=RESEND时,Cognito会触发该Lambda发送自定义邮件,同时重置账户过期限制。
内容的提问来源于stack exchange,提问作者Reyan Chougle
相关产品推荐
相关产品推荐

