Пользователь лямбда-миграции узла AWS Cognito: authenticateUser не определен - PullRequest
1 голос
/ 15 октября 2019

Я хотел бы перенести пользователей из userPool 1 в userPool 2 с помощью лямбда-миграции пользователей в функции консоли AWS. Чтобы сделать это, я использовал скрипт, предоставленный AWS, но я не могу найти, как я могу использовать authenticateUser, например. Это не определяется при исполнении.

Миграция лямбда выполнена. authenticateUser не определено

Я также попытался создать слой, успешно импортировать и установить слой в моей функции lambda, но не могу заставить его работать тоже.

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

authenticateUser не определено

Мой вопрос: как мы импортируем эту функцию?

Большое спасибо.

1 Ответ

0 голосов
/ 17 октября 2019

Этот пример кода предназначен для миграции пользователя из устаревшей базы данных, а функции authenticateUser, lookupUser - это просто абстракции для вашей бизнес-логики (которую AWS не может написать для вас). Например, если вам нужно выполнить миграцию из унаследованной базы данных (не из пула пользователей), тогда вы будете искать их пользователя в таблице, получать их соль, хэшировать пароль, передаваемый триггеру миграции, используя ту же логику, что и в прежнем. метод проверки подлинности, сравните его с сохраненным хешированным паролем в устаревшей базе данных и т. д. (становится немного проще, если вы храните пароли в незашифрованном виде, но давайте не будем это рассматривать.)

Вот фрагмент кода, который следует выполнитьбольшая часть миграции для вас. Кто-то задал похожий вопрос на Github и ссылался на эту проблему StackOverflow.

const AWS = require('aws-sdk');
const cognitoIdentity = new AWS.CognitoIdentityServiceProvider({ region: '<your-region-here>' });

const UserPoolId = process.env.deprecatedUserPoolId;

exports.handler = async (event) => {
    const { userName } = event;

    const getUserParams = {
        Username: userName,
        UserPoolId
    };

    try {
        const user = await cognitoIdentity.adminGetUser(getUserParams).promise();
        //TODO: if you have custom attributes, grab them from the user variable and store them in the response below
        event.response = { finalUserStatus: "CONFIRMED" }
        return event;
    } catch (e) {
        throw e; //no user to migrate, give them an error in the client 
    }
};
...