迁移用户 Lambda 触发器 - Amazon Cognito
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

如果我们为英文版本指南提供翻译,那么如果存在任何冲突,将以英文版本指南为准。在提供翻译时使用机器翻译。

迁移用户 Lambda 触发器

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

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

迁移用户 Lambda 触发器源

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

迁移用户 Lambda 触发器参数

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

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

迁移用户请求参数

userName

用户输入的用户名。

密码

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

validationData

在用户的登录请求中包含验证数据的一个或多个键/值对。您可以使用 InitiateAuthAdminInitiateAuth API 操作中的 ClientMetadata 参数将此数据传递给 Lambda 函数。

clientMetadata

一个或多个键值对,您可以将其作为自定义输入内容提供给 Lambda 函数,该函数是为迁移用户触发器指定的。您可以使用 AdminRespondToAuthChallengeForgotPassword API 操作中的 ClientMetadata 参数将此数据传递给 Lambda 函数。

迁移用户响应参数

userAttributes

此字段为必填字段。

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

注意

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

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

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

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

注意

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

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
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); } };