【问题标题】:User Migration to Cognito using Lambda trigger in python在 python 中使用 Lambda 触发器用户迁移到 Cognito
【发布时间】:2018-09-19 13:50:25
【问题描述】:

我在 Python 中创建了一个 Lambda 函数,用于将用户从 RDS 迁移到 AWS Cognito。我面临的问题是我的函数的返回类型,以便 Cognito 创建用户。起初我返回的是 JSON:

return {
        "response": {
            "userAttributes": {
                "email": event["userName"],
            },
            "finalUserStatus": "CONFIRMED",
            "messageAction": "SUPPRESS",
            "desiredDeliveryMediums": "EMAIL",
            "forceAliasCreation": "false"
        }
    }

导致异常:

我还尝试关注他们提出的关于通过 Lambda 迁移用户的唯一 code Sample(第 109 页):

exports.handler = function (event, context) {
if (event.triggerSource == "UserMigration_Authentication") {
    // authenticate the user with your existing user directory service
    var 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 {
        context.fail("Bad password");
    }
} else if (event.triggerSource == "UserMigration_ForgotPassword") {
    // Lookup the user in your existing user directory service
    var 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 {
        context.fail("Bad password");
    }
} else {
    context.fail("Bad triggerSource " + event.triggerSource);
}
};

在这个例子中,我假设我应该在添加新值后返回“事件”对象,下面是我的 Python 代码:

event["response"] = {
            "userAttributes": {
                "email": event["userName"],
                "email_verified": "true"
            },
            "finalUserStatus": "CONFIRMED",
            "messageAction": "SUPPRESS",
            "desiredDeliveryMediums": "EMAIL",
            "forceAliasCreation": "false"
        }

    return event

但这也不起作用并引发了同样的异常。在 Cognito 中创建新用户的正确返回类型是什么?

【问题讨论】:

  • 遇到一模一样的问题,不知道去哪里查日志,很郁闷。
  • 我刚刚添加了一个答案 - 结果证明我的事件对象格式不正确。
  • 我的问题只是打错字...

标签: python-2.7 aws-lambda amazon-cognito


【解决方案1】:

问题出在事件对象中,这是我为使其正常工作所做的更改: 删除线

"desiredDeliveryMediums": "EMAIL",

因为这与参数冲突 - "messageAction": "SUPPRESS"。

还有

"forceAliasCreation": "false" 

不是必需的,因为 false 是默认值。还应该有一个测试来检查用户池中是否不存在用户名/电子邮件。

我在我的用户池中使用以下代码进行了测试,它可以工作。

def lambda_handler(event, context):
    ## print("migrateUserLambda Python")

    event["response"] = {
            "userAttributes": {
                "email": event["userName"],
                "email_verified": "true"
            },
            "finalUserStatus": "CONFIRMED",
            "messageAction": "SUPPRESS"
        }

    return event  

【讨论】:

  • 你让我很开心。
  • 你也成就了我的一天。
猜你喜欢
  • 1970-01-01
  • 2022-08-10
  • 2020-12-23
  • 1970-01-01
  • 2021-05-20
  • 1970-01-01
  • 1970-01-01
  • 2018-04-02
  • 2020-10-02
相关资源
最近更新 更多