Amazon Cognito
开发人员指南
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 Amazon AWS 入门

迁移用户 Lambda 触发器

如果用户在使用密码登录时,或在使用忘记密码流程时未在用户池中,Amazon Cognito 会调用此触发器。Lambda 函数成功返回后,Amazon Cognito 将在用户池中创建用户。有关利用用户迁移 Lambda 触发器进行身份验证流程的详细信息,请参阅利用用户迁移 Lambda 触发器将用户导入用户池

您可以使用此 Lambda 触发器,在用户登录时,或在忘记密码流程中,将他们从现有用户目录迁移到 Amazon Cognito 用户池。

迁移用户 Lambda 触发器源

triggerSource 值 触发事件
UserMigration_Authentication 用户登录时进行迁移。
UserMigration_ForgotPassword 在忘记密码流程中迁移用户。

迁移用户 Lambda 触发器参数

这些是此 Lambda 函数除常用参数以外还必需的参数。

JSON
JSON
{ "userName": "string", "request": { "password": "string" }, "response": { "userAttributes": { "string": "string", ... }, "finalUserStatus": "string", "messageAction": "string", "desiredDeliveryMediums": [ "string", ... ], "forceAliasCreation": boolean } }

迁移用户请求参数

userName

用户输入的用户名。

密码

由用户输入的登录密码。不是在忘记密码流程中设置的密码。

迁移用户响应参数

userAttributes

此字段为必填字段。

它必须包含一个或多个名称-值对,表示要存储在用户池中的用户配置文件内的用户属性。您可以同时包括标准的和自定义的用户属性。自定义属性需要使用 custom: 前缀,以便与标准属性区分开来。有关更多信息,请参阅自定义属性

注意

为了便于用户在忘记密码流程中重置密码,用户必须拥有经过验证的电子邮件或电话号码。Amazon Cognito 将包含重置密码代码的消息发送到 .csv 文件中指定的电子邮件或电话号码。

属性 要求
创建用户池时标记为必需的所有属性 如果迁移过程中缺少任何必需的属性,将使用默认值。
username

如果您已使用电子邮件和/或 preferred_username 别名配置用户池 (登录用户名除外),而用户输入电子邮件或电话号码进行登录,此属性必需。

否则将用作可选用户名,替代用户输入的用户名。

注意

在用户池中,用户名必须是唯一的。

cognito:mfa_enabled 如果 MFA 在用户池中配置为可选,此属性必需。此属性指明是否为用户启用了 MFA。
finalUserStatus

在登录期间,此属性可设置为 CONFIRMED 或不设置,以自动确认您的用户,并允许他们使用原来的密码登录。对于用户而言,这是最简单的体验。

如果此属性设置为 RESET_REQUIRED,用户必须在迁移后 (即登录时) 立即更改密码,而您的客户端应用程序需要在身份验证流程期间处理 PasswordResetRequiredException

注意

新用户池的密码策略不应强于现有用户目录的密码策略。

messageAction

此属性可设置为 "SUPPRESS",以隐藏通常由 Amazon Cognito 发送给新用户的欢迎消息。如果未返回此属性,将不发送欢迎消息。

desiredDeliveryMediums

此属性设置为 "EMAIL" 可通过电子邮件发送欢迎消息;设置为 "SMS" 可通过 SMS 发送欢迎消息。如果未返回此属性,将通过 SMS 发送欢迎消息。

forceAliasCreation

如果该参数设置为 "true",并且在 UserAttributes 参数中指定的电话号码或电子邮件地址已作为其他用户的别名存在,则 API 调用会将该别名从以前的用户迁移到新创建的用户。以前的用户将无法再使用该别名登录。

如果此属性设置为 "false" 且别名存在,将不会迁移用户,并且一个错误将返回客户端应用程序。

如果未返回此属性,则认为是 "false"。

示例:使用现有密码迁移用户

此示例 Lambda 函数迁移已有密码的用户,并隐藏 Amazon Cognito 发送的欢迎消息。

Node.js
Node.js
exports.handler = (event, context, callback) => { var user; if ( event.triggerSource == "UserMigration_Authentication" ) { // authenticate the user with your existing user directory service user = authenticateUser(event.userName, event.request.password); if ( user ) { event.response.userAttributes = { "email": user.emailAddress, "email_verified": "true" }; event.response.finalUserStatus = "CONFIRMED"; event.response.messageAction = "SUPPRESS"; context.succeed(event); } else { // Return error to Amazon Cognito callback("Bad password"); } } else if ( event.triggerSource == "UserMigration_ForgotPassword" ) { // Lookup the user in your existing user directory service user = lookupUser(event.userName); if ( user ) { event.response.userAttributes = { "email": user.emailAddress, // required to enable password-reset code to be sent to user "email_verified": "true" }; event.response.messageAction = "SUPPRESS"; context.succeed(event); } else { // Return error to Amazon Cognito callback("Bad password"); } } else { // Return error to Amazon Cognito callback("Bad triggerSource " + event.triggerSource); } };