es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

La ejecución de lambda de ConfirmForgotPassword después de la confirmación de contraseña devuelve una excepción de tipo InvalidLambdaResponseException – Salida de lambda no reconocible.

He pasado muchas horas resolviendo este problema, todas las respuestas relacionadas en SO parecen estar desactualizadas o no relevantes.

Estado:

  • Amplify.js “4.3.10” con el siguiente código:
    Auth.forgotPasswordSubmit(email, confirmationCode, password)
    .then(_ => this.notification.success("Confirmation OK"))
    .catch(err => console.log(err));
    
  • Lambda en Node.js 14

  • Desencadenador de Cognito: “Post confirmation”

Código de la función Lambda:

'use strict';

exports.handler = async (event, context, callback) => {
    if (event.triggerSource === "PostConfirmation_ConfirmForgotPassword") {
      const postConfirmEmail = () => `<html><body>AQUÍ ESTÁ MI PLANTILLA</body></html>`;

      event.response = {
          emailSubject: "Reset Password Notification",
          emailMessage: postConfirmEmail()
      };

      callback(null, event);
    } 
};

Como resultado, estoy recibiendo el siguiente error: “InvalidLambdaResponseException: Respuesta no reconocible de la función Lambda (Error 400)”.

El problema es que la contraseña se actualiza correctamente, pero la confirmación del correo electrónico NO se envía y el error persiste.

Consejo: El usuario está CONFIRMADO. También se ha intentado con “context.done(null, event);” / “return event;”, pero la respuesta siempre muestra el mismo error.

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    El problema que estás enfrentando está relacionado con una respuesta inválida que está siendo devuelta por tu función Lambda. El mensaje de error sugiere que la respuesta devuelta por la función Lambda no es reconocida por AWS.

    Observando tu código, parece que estás intentando configurar el asunto y el mensaje del correo electrónico de confirmación en tu función Lambda. Sin embargo, el formato de la respuesta es incorrecto.

    De acuerdo con la documentación de AWS, la respuesta devuelta por la función Lambda en el caso de un activador PostConfirmation_ConfirmForgotPassword debe tener el siguiente formato:

    {
        "emailSubject": "string",
        "emailMessage": "string",
        "smsMessage": "string",
        "lambdaVersion": "string"
    }
    

    En tu código, solamente estás configurando las propiedades emailSubject y emailMessage. También deberías configurar la propiedad smsMessage como una cadena vacía y la propiedad lambdaVersion como la versión actual de Lambda.

    Aquí tienes una versión actualizada de tu código de función Lambda:

    'use strict';
    
    exports.handler = async (event, context, callback) => {
        if (event.triggerSource === "PostConfirmation_ConfirmForgotPassword") {
            const postConfirmEmail = () => `<html><body>AQUÍ ESTÁ MI PLANTILLA</body></html>`;
    
            event.response = {
                emailSubject: "Notificación de Reinicio de Contraseña",
                emailMessage: postConfirmEmail(),
                smsMessage: '',
                lambdaVersion: context.functionVersion
            };
    
            return event;
        }
    };
    

    Con estos cambios, tu función Lambda debería devolver una respuesta válida y el correo electrónico de confirmación debería ser enviado como se espera.

    Nota: Si aún enfrentas problemas después de realizar estos cambios, es posible que pueda haber otros problemas en tu código o configuración que estén causando el error.

Comments are closed.