Неузнаваемый лямбда-вывод в AWS Lambda Custom Auth

Я хочу аутентифицировать своего пользователя, используя 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;
};

Процесс в моем коде внешнего интерфейса:

  • cognito.adminInitiateAuth: это работает, поскольку возвращает токен сеанса.
  • cognito.respondToAuthChallenge: Именно в этот момент я столкнулся с ошибкой. Несмотря на то, что он регистрирует ****** 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"
    }
}

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
0
74
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Окончательно! Я потратил много времени на отладку этой проблемы. Давайте разберем проблему и решение.

Логика кода верна, но ошибка «Нераспознаваемый лямбда-вывод» возникла из-за того, что ответ, отправленный на триггер, не соответствовал ожидаемому формату. Проблема заключалась в том, что я добавил дополнительный атрибут/параметр, который не был нужен:

event.response.finalUserStatus = 'CONFIRMED';

Удалив эту строку, ошибка была устранена, и теперь код работает должным образом. Надеюсь, это поможет любому, кто столкнулся с той же проблемой!

Другие вопросы по теме