Я хочу аутентифицировать своего пользователя, используя CUSTOM_AUTH в AWS Lambda, используя nodejs 16. На данный момент я хочу предоставить фиксированный ответ на вызов. Однако я получил сообщение об ошибке Unrecognizable lambda output. Мой код ниже
exports.handler = async (event) => {
console.info('Received event:', JSON.stringify(event, null, 2));
if (event.triggerSource === 'DefineAuthChallenge_Authentication') {
console.info('****** DefineAuthChallenge Trigger ******');
if (!event.request.session || event.request.session.length === 0) {
console.info('****** No session or empty session. Starting new authentication. ******');
event.response.issueTokens = false;
event.response.failAuthentication = false;
event.response.challengeName = 'CUSTOM_CHALLENGE';
} else {
const session = event.request.session;
console.info('****** Session:', JSON.stringify(session, null, 2));
const lastChallenge = session[session.length - 1];
const answerCorrect = lastChallenge.challengeResult;
if (answerCorrect) {
console.info('****** Correct answer provided. Issuing tokens. ******');
event.response.issueTokens = true;
event.response.failAuthentication = false;
event.response.finalUserStatus = 'CONFIRMED';
} else {
console.info('****** Incorrect answer. Failing authentication. ******');
event.response.issueTokens = false;
event.response.failAuthentication = true;
event.response.challengeName = 'CUSTOM_CHALLENGE';
}
}
} else if (event.triggerSource === 'CreateAuthChallenge_Authentication') {
console.info('****** CreateAuthChallenge Trigger ******');
const fixedPassword = "sPi3trbs7WL7I4PHNGa5XTP7ryavwn";
event.response.publicChallengeParameters = {};
event.response.privateChallengeParameters = { answer: fixedPassword };
event.response.challengeMetadata = fixedPassword;
} else if (event.triggerSource === 'VerifyAuthChallengeResponse_Authentication') {
console.info('****** VerifyAuthChallengeResponse Trigger ******');
const expectedAnswer = event.request.privateChallengeParameters.answer;
console.info('Expected Answer:', expectedAnswer);
console.info('Provided Answer:', event.request.challengeAnswer);
if (event.request.challengeAnswer === expectedAnswer) {
event.response.answerCorrect = true;
} else {
event.response.answerCorrect = false;
}
}
console.info('======= Returning Event:', JSON.stringify(event, null, 2));
return event;
};
Процесс в моем коде внешнего интерфейса:
****** Correct answer provided. Issuing tokens. ******. Но после этого я получил ошибку «Нераспознаваемый вывод лямбды».Ниже приведен ответ на событие в лямбде:
{
"version": "1",
"region": "us-west-2",
"userPoolId": "us-west-2_4dPsZcssz",
"userName": "venue_2002",
"callerContext": {
"awsSdkVersion": "aws-sdk-nodejs-2.1593.0",
"clientId": "6pbb8jj4061em2e18jpmnjtes0"
},
"triggerSource": "DefineAuthChallenge_Authentication",
"request": {
"userAttributes": {
"sub": "7831d320-20b1-7078-12c7-9469a2a8d0c9",
"cognito:user_status": "FORCE_CHANGE_PASSWORD"
},
"session": [
{
"challengeName": "CUSTOM_CHALLENGE",
"challengeResult": true,
"challengeMetadata": "sPi3trbs7WL7I4PHNGa5XTP7ryavwn"
}
]
},
"response": {
"challengeName": null,
"issueTokens": true,
"failAuthentication": false,
"finalUserStatus": "CONFIRMED"
}
}



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Окончательно! Я потратил много времени на отладку этой проблемы. Давайте разберем проблему и решение.
Логика кода верна, но ошибка «Нераспознаваемый лямбда-вывод» возникла из-за того, что ответ, отправленный на триггер, не соответствовал ожидаемому формату. Проблема заключалась в том, что я добавил дополнительный атрибут/параметр, который не был нужен:
event.response.finalUserStatus = 'CONFIRMED';
Удалив эту строку, ошибка была устранена, и теперь код работает должным образом. Надеюсь, это поможет любому, кто столкнулся с той же проблемой!