Лямбда Cognito, запускаемая по пользовательскому сообщению, возвращает InvalidLambdaResponseException - PullRequest
1 голос
/ 08 мая 2019

Я создал лямбду и назначил ее на cognito, выбрасывающий пользовательский интерфейс в качестве лямбды на основе пользовательских сообщений.Вот код в машинописи:

export const handler = async (event) => {
    const trigger = event.triggerSource
    const customMessage = cloneDeep(customMessages[trigger])
    if (customMessage) {
        try {
            // inject cognito values to custom message
            const codeParameter = event.request.codeParameter
            const usernameParameter = event.request.usernameParameter
            for (let key in customMessage) {
                let text = customMessage[key]
                if (codeParameter) {
                    customMessage[key] = text.replace(/{{codeParameter}}/g, codeParameter)
                }
                if (usernameParameter) {
                    customMessage[key] = text.replace(/{{usernameParameter}}/g, usernameParameter)
                }
            }
            // load HTML template
            let htmlFile = readFileSync(templateFilePath, { encoding: 'utf8' })
            htmlFile = htmlFile.replace(/(\r\n|\n|\r)/gm, '')
            const template = handlebars.compile(htmlFile)
            const html = template(customMessage)
            event.emailMessage = html
            event.response.emailSubject = customMessage.title
        } catch (err) {
            logger.error(err)
            return event
        }
    }
    return event
}

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

теперь ответ, который возвращает лямбда-поток регистрации:

{
    "message": "InvalidLambdaResponseException",
    "details": "Unrecognizable lambda output"
}

I событие попыталось скопировать вставить пример AWS:

exports.handler = (event, context, callback) => {
    //
    if(event.userPoolId === "theSpecialUserPool") {
        // Identify why was this function invoked
        if(event.triggerSource === "CustomMessage_SignUp") {
            // Ensure that your message contains event.request.codeParameter. This is the placeholder for code that will be sent
            event.response.smsMessage = "Welcome to the service. Your confirmation code is " + event.request.codeParameter;
            event.response.emailSubject = "Welcome to the service";
            event.response.emailMessage = "Thank you for signing up. " + event.request.codeParameter + " is your verification code";
        }
        // Create custom message for other events
    }
    // Customize messages for other user pools

    // Return to Amazon Cognito
    callback(null, event);
};

Ответ тот же.

Есть предложения?Спасибо

1 Ответ

0 голосов
/ 08 мая 2019

Вот мое личное сообщение лямбда. Он работает на узле 8.10. Может быть, вы хотите проверить / адаптировать его. Я удалил некоторые другие вещи, но они должны нормально работать

exports.handler = function(event, context) {

const cognitoUserPool = 'us-east-1_AAAAAA';
const snsTopicArn = 'arn:aws:sns:us-east-1:9999999999:BBBBBBBBBB';
const baseurl = 'https://company.us-east-1.elasticbeanstalk.com/app';

console.log('Cognito Event:', event);

var AWS = require("aws-sdk");

if(event.userPoolId === cognitoUserPool) {
    if(event.triggerSource === "CustomMessage_SignUp") {
        event.response.emailSubject = "Welcome to Company";
        event.response.emailMessage =  "Hello etc";
        context.done(null, event);
    }
    if(event.triggerSource === "CustomMessage_ResendCode") {
        event.response.emailSubject = "Welcome to Company";
        event.response.emailMessage =  "Some other message etc";
        context.done(null, event);
    }
    if(event.triggerSource === "CustomMessage_ForgotPassword") {
        event.response.emailSubject = "Your password reset";
        event.response.emailMessage =  "Some other message again etc";
        context.done(null, event);
    }
    // Other event types can go here
} else {
    context.done(null, event);
}

};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...