AWS Cognito - 是否可以使用临时密码重新发送注册电子邮件?

AWS Cognito - Possible to resend Signup Email with temporary password?

搜索官方 AWS CLI cognito-idp 文档后,似乎无法 'reset' 用户在某个时间点被确认后回到 FORCE_CHANGE_PASSWORD 状态。

看来唯一的办法就是复制用户数据,删除用户账号,然后用复制的数据为用户重新创建一个新账号,例如:

client = boto3.client("cognito-idp", AWS_REGION)

try: 
  user = client.admin_get_user(user_pool_id, user_id) # get user
  user_data = get_from(user) # copy user data
  client.admin_delete_user(user_pool_id, user_id) # delete user
  response = client.admin_create_user(**user_data) # create new user?
except Exception as e:
  handle(e)

这将使用户处于 FORCE_CHANGE_PASSWORD 状态,并重新触发注册 email/message 这是期望的结果,但是,这似乎容易出现各种问题...

注意:我已经尝试再次调用 admin_create_user 并将消息操作设置为 'resend',但是,如果用户在任何时候都处于 CONFIRMED 状态,该调用将导致以下错误消息:

(UnsupportedUserStateException) when calling the AdminCreateUser operation: Resend not possible. XXXXXXXXXXXXXXX status is not FORCE_CHANGE_PASSWORD

另一种选择是单独调用以获取用户的当前状态,如果他们处于已确认状态,则调用 admin-reset-user-password,这至少可以缓解由删除帐户...

肯定有更优雅的解决方案吗?

对于遇到类似问题的任何人,事实证明这与将 email verified 作为用户池的要求有关。我怀疑如果您不需要验证您的用户电子邮件地址,您就不会 运行 进入这个问题。