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

AWS Cognito已配置邮箱登录 邮箱密码认证报错如何解决

修复方案

这个报错的核心原因是Cognito用户池的全局邮箱登录配置不会自动同步到关联的应用客户端,仅开全局开关时,客户端认证逻辑仍会把传入的邮箱值当做Cognito内部用户名匹配,自然匹配不到用户返回账号密码错误,按以下步骤调整配置即可:

  • 进入对应Cognito用户池控制台,打开你代码里<some_client_id>对应的应用客户端配置页,不要在用户池全局配置页修改
  • 找到「认证流」配置板块,确认已勾选ALLOW_USER_PASSWORD_AUTH选项,匹配你代码中使用的USER_PASSWORD_AUTH认证流
  • 在同个应用客户端配置页找到登录用户名属性配置,选择「邮箱」作为允许的登录标识,不要仅选「用户名」
  • 下拉到属性权限配置板块,确认当前应用客户端拥有email字段的读取权限,无读取权限时Cognito无法完成邮箱到内部用户ID的映射
  • 额外校验:进入测试用户的详情页,确认email_verified字段值为true,未完成验证的邮箱无法作为登录凭证使用

配置完成后不需要修改现有代码逻辑,AuthParameters中的USERNAME字段直接传入邮箱地址完全符合API规范。如果配置后仍报错,可以先调用AdminGetUser接口传入邮箱地址测试是否能正常返回用户信息,确认映射关系生效,参考测试代码:

import { CognitoIdentityProviderClient, AdminGetUserCommand } from "@aws-sdk/client-cognito-identity-provider";

const cognitoClient = new CognitoIdentityProviderClient({region: "us-east-1"});
// 校验邮箱是否能被识别为有效用户标识
const userInfo = await cognitoClient.send(new AdminGetUserCommand({
  UserPoolId: "<替换为你的用户池ID>",
  Username: "foo@bar.com"
}));
// 正常返回内部生成的用户UUID即代表映射配置生效
console.log(userInfo.Username);

如果你使用的是2020年之前创建的旧版Cognito用户池,还需要额外在用户池别名策略配置中勾选「邮箱」作为允许的认证别名,新版用户池已将该配置合并到登录属性配置项中,无需额外操作。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 10:09:21