Отправка сообщения из триггеров Cognito

#aws-lambda #amazon-cognito

#aws-lambda #amazon-cognito

Вопрос:

Я хочу ограничить входы пользователей из пользовательского интерфейса, размещенного на Cognito. Я вижу, что существуют триггеры, в которые мы можем присоединить lambda, но всякий раз, когда я изменяю объект события внутри lambda, вместо получения моего пользовательского сообщения User exceeded limits , я получаю unrecognizable lambda output ошибку.

Кто-нибудь может мне помочь в этом или есть какой-либо другой способ добиться этой функциональности?

Теперь я получаю это ошибка cognito от триггера

с помощью этого кода :

 exports.handler = (event, context, callback) => {
    if (true) {
        var error = new Error("Cannot signin because your signin count is 5");
        // Return error to Amazon Cognito
        callback(error, event);
    }
    // Return to Amazon Cognito
    callback(null, event);
};
  

Но мне не нужен префикс PreAuthentication failed with error , я просто хочу отобразить свое сообщение.

Любая помощь приветствуется.

Ответ №1:

В настоящее время нет способа запретить Cognito добавлять префикс, поскольку форма является размещенным веб-интерфейсом.

Если это сложное требование, обходной путь — создать собственную форму входа и использовать aws-cognito-sdk

Как только вы вызовете cognitoUser.authenticateUser в приведенном ниже коде, триггер предварительной аутентификации запустит функцию Lambda, и вам нужно будет обработать ошибку и проанализировать ее, чтобы удалить нежелательный префикс.

Надеюсь, это поможет

примеры aws: Использование JavaScript SDK

 var authenticationData = {
    Username : 'username',
    Password : 'password',
};
var authenticationDetails = new AmazonCognitoIdentity.AuthenticationDetails(authenticationData);
var poolData = { UserPoolId : 'us-east-1_TcoKGbf7n',
    ClientId : '4pe2usejqcdmhi0a25jp4b5sh3'
};
var userPool = new AmazonCognitoIdentity.CognitoUserPool(poolData);
var userData = {
    Username : 'username',
    Pool : userPool
};
var cognitoUser = new AmazonCognitoIdentity.CognitoUser(userData);
cognitoUser.authenticateUser(authenticationDetails, {
    onSuccess: function (result) {
        var accessToken = result.getAccessToken().getJwtToken();

        /* Use the idToken for Logins Map when Federating User Pools with identity pools or when passing through an Authorization Header to an API Gateway Authorizer*/
        var idToken = result.idToken.jwtToken;
    },

    //Your message from the Lambda will return here, you will need to parse the err to remove the unwanted prefix*
    onFailure: function(err) {

        alert(err);
    },

});