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

Ruby后端调用Cognito admin_initiate_auth报错:UserNotFoundException

解决Cognito中使用admin_initiate_auth时的UserNotFoundException问题

嘿,我一眼就看出问题啦——你现在用的admin_initiate_auth搭配ADMIN_NO_SRP_AUTH是用来认证已存在用户的方法,根本不是创建新用户的工具!所以当目标用户还没在Cognito用户池里时,自然会抛出UserNotFoundException这个错误。

要实现“创建用户+认证”的完整流程,得分成几步走:

第一步:先创建Cognito用户

你需要用admin_create_user方法先把用户添加到用户池中,代码示例如下:

client = Aws::CognitoIdentityProvider::Client.new

# 创建新用户
create_response = client.admin_create_user({
  user_pool_id: ENV['AWS_COGNITO_POOL_ID'],
  username: @user.email,
  temporary_password: '123456789', # 生成临时密码,默认要求用户首次登录修改
  message_action: 'SUPPRESS' # 可选:如果不想让Cognito自动发送注册通知邮件,加上这个参数
})

第二步(可选):设置永久密码(跳过临时密码环节)

如果不想让用户用临时密码登录后修改密码,你可以在创建用户后直接设置永久密码:

# 给刚创建的用户设置永久密码
client.admin_set_user_password({
  user_pool_id: ENV['AWS_COGNITO_POOL_ID'],
  username: @user.email,
  password: '123456789',
  permanent: true # 标记为永久密码,用户无需修改即可登录
})

第三步:执行用户认证

现在用户已经存在于用户池中了,再运行你原来的admin_initiate_auth代码就不会报错啦:

response = client.admin_initiate_auth({
  auth_flow: 'ADMIN_NO_SRP_AUTH',
  auth_parameters: { 
    'USERNAME': @user.email, 
    'PASSWORD': '123456789' 
  },
  client_id: ENV['AWS_COGNITO_CLIENT_ID'],
  user_pool_id: ENV['AWS_COGNITO_POOL_ID']
})

额外注意事项

  • 确保你的IAM角色拥有以下权限:cognito-idp:AdminCreateUser、cognito-idp:AdminSetUserPassword、cognito-idp:AdminInitiateAuth,否则会遇到权限错误
  • 如果你的用户池开启了AllowAdminCreateUserOnly选项,那么所有用户都只能通过这种后台创建的方式添加,不能让用户自行注册
  • 临时密码默认有有效期,且要求用户首次登录时必须修改,如果你不需要这个逻辑,一定要用admin_set_user_password设置永久密码

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 12:33:07