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

如何在AWS Lambda中强制触发AWS Cognito重置密码邮件?

解决AWS Cognito编程触发重置密码邮件的问题

你遇到的问题是因为adminResetUserPassword本身的设计就是只标记用户状态,不会主动触发邮件发送——邮件触发依赖Cognito用户池的配置和特定触发条件。下面是几个可行的解决办法:

1. 先检查用户池基础配置

  • 确认用户池的消息自定义模块里,重置密码的邮件模板已经启用,并且配置了正确的主题和内容(别漏了{####}这类验证码占位符)
  • 去MFA和验证设置里,确保“发送验证消息”的触发规则包含密码重置场景
  • 目标用户的邮箱必须是已验证状态,Cognito不会给未验证邮箱发任何操作邮件

2. 用adminCreateUser强制触发邮件

这是最直接的方法,针对已有用户,调用adminCreateUser并设置MessageAction='RESEND',Cognito会自动发送包含重置链接或临时密码的邮件,同时重置用户密码。

Node.js示例代码:

const AWS = require('aws-sdk');
const cognito = new AWS.CognitoIdentityServiceProvider();

exports.handler = async (event) => {
  const params = {
    UserPoolId: '你的用户池ID',
    Username: '目标用户名',
    MessageAction: 'RESEND',
    // 可选:如果需要强制设置临时密码,否则Cognito会自动生成
    TemporaryPassword: 'TempPass123!'
  };

  try {
    await cognito.adminCreateUser(params).promise();
    return { statusCode: 200, body: '重置邮件已发送' };
  } catch (err) {
    return { statusCode: 500, body: err.message };
  }
};

注意:如果用户原本有密码,这个操作会覆盖原密码,适合需要强制重置的场景。

3. 自定义邮件发送逻辑(完全可控)

如果不想依赖Cognito的默认邮件,你可以手动生成重置链接,用AWS SES发送自定义邮件:

  • 先调用adminResetUserPassword标记用户需要重置密码
  • 调用adminGetUser获取用户的邮箱地址
  • 构造重置链接(格式参考:https://<你的用户池域名>/login?response_type=code&client_id=<客户端ID>&redirect_uri=<回调地址>&username=<用户名>&action=resetPassword)
  • 用SES发送包含该链接的邮件,内容完全由你自定义

4. 利用Cognito自定义消息触发器

配置用户池的Custom Message触发器,当触发密码重置事件时,直接控制邮件发送:

  • 在Lambda触发器中,判断triggerSource是否为CustomMessage_AdminResetUserPassword
  • 要么修改Cognito默认的邮件内容,让Cognito帮忙发送;要么直接在触发器里调用SES发送自定义邮件

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 12:55:25