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

TypeScript实现AWS Cognito用户池忘记密码路由问题求助

AWS Cognito 忘记密码路由问题解答

核心问题解答

AWS Cognito不支持用户直接查看密码(用户密码以哈希形式存储,无法逆向解析),但完全支持你设想的「用户触发重置请求→接收验证码→验证后设置新密码」的自助重置流程,这是Cognito的标准功能。

错误原因分析

你收到的Contact administrator to reset password错误,是因为当前用户池的配置限制了用户自助重置密码,强制要求管理员操作。

配置修正步骤

  1. 登录AWS控制台,进入目标Cognito用户池
  2. 切换到「用户池属性」标签页,找到「密码策略」板块
  3. 在「忘记密码」选项中,选择「允许用户通过验证联系信息自助重置密码」
  4. 保存配置

完整代码实现

你的现有代码只完成了「发送验证码」的第一步,完整流程需要分两步实现:发送验证码、验证验证码并重置密码。以下是修正后的TypeScript代码:

1. 发送验证码接口

import AmazonCognitoIdentity from 'amazon-cognito-identity-js';

const UserPoolId = '你的用户池ID';
const ClientId = '你的客户端ID';

export const sendPasswordResetCode = async (req, res) => {
  try {
    const { username } = req.body;

    const poolData = {
      UserPoolId,
      ClientId,
    };
    const userPool = new AmazonCognitoIdentity.CognitoUserPool(poolData);
    const userData = {
      Username: username,
      Pool: userPool,
    };
    const cognitoUser = new AmazonCognitoIdentity.CognitoUser(userData);

    cognitoUser.forgotPassword({
      onSuccess: () => {
        res.status(200).json({ message: "验证码已发送至你的注册邮箱/手机号" });
      },
      onFailure: (err) => {
        res.status(400).json({ message: "发送验证码失败", error: err.message });
      },
    });
  } catch (err) {
    res.status(500).json({ message: "服务器错误", error: err.message });
  }
};

2. 验证验证码并重置密码接口

export const confirmPasswordReset = async (req, res) => {
  try {
    const { username, verificationCode, newPassword } = req.body;

    const poolData = {
      UserPoolId,
      ClientId,
    };
    const userPool = new AmazonCognitoIdentity.CognitoUserPool(poolData);
    const userData = {
      Username: username,
      Pool: userPool,
    };
    const cognitoUser = new AmazonCognitoIdentity.CognitoUser(userData);

    cognitoUser.confirmPassword(verificationCode, newPassword, {
      onSuccess: () => {
        res.status(200).json({ message: "密码重置成功" });
      },
      onFailure: (err) => {
        res.status(400).json({ message: "密码重置失败", error: err.message });
      },
    });
  } catch (err) {
    res.status(500).json({ message: "服务器错误", error: err.message });
  }
};

完整业务流程

  1. 用户在前端输入用户名,调用sendPasswordResetCode接口
  2. Cognito自动向用户注册时提供的邮箱/手机号发送验证码
  3. 用户在前端输入收到的验证码和新密码,调用confirmPasswordReset接口
  4. 验证通过后,用户密码完成重置,可使用新密码登录

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 12:53:14