【发布时间】:2019-05-09 00:06:50
【问题描述】:
我创建了一个 lambda 并将其分配给 cognito,以便将 UI 作为其自定义消息 lambda。 这是打字稿中的代码:
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 的 CloudWatch 日志,并将其粘贴到此处。
-
我认为文档中的示例已经过时了。看看发布的答案。我一直在使用
context.done(null, event);而不是我的asyncCognito Lambdas 中的callback(null, event);,到目前为止它对我有用。
标签: amazon-web-services amazon-cognito