Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Amazon web services Cognito自定义消息触发的lambda返回InvalidLambdaResponseException_Amazon Web Services_Amazon Cognito - Fatal编程技术网

Amazon web services Cognito自定义消息触发的lambda返回InvalidLambdaResponseException

Amazon web services Cognito自定义消息触发的lambda返回InvalidLambdaResponseException,amazon-web-services,amazon-cognito,Amazon Web Services,Amazon Cognito,我已经创建了一个lambda并将其分配给cognito,并将其作为自定义消息lambda抛出UI。 以下是typescript中的代码: export const handler = async (event) => { const trigger = event.triggerSource const customMessage = cloneDeep(customMessages[trigger]) if (customMessage) { tr

我已经创建了一个lambda并将其分配给cognito,并将其作为自定义消息lambda抛出UI。 以下是typescript中的代码:

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模板文件并注入代码参数和用户名

现在,我们的注册流lambda返回的响应是:

{
    "message": "InvalidLambdaResponseException",
    "details": "Unrecognizable lambda output"
}
我尝试复制粘贴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);
};
答案是一样的

有什么建议吗?
谢谢

这是我的自定义消息lambda。它在节点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);
}

};

请检查Lambda的CloudWatch日志,并将其粘贴到此处。我认为文档中的示例已经过时。。看看张贴的答案。我一直在使用
context.done(null,event)而不是
回调(null,事件)来自我的
async
Cognito Lambdas,到目前为止它对我很有效。