javascript - Vilken typ av händelse skickar Cognito från Pre Sign-up Lambda Trigger


Jag har skapat en PreSignup Lambda-funktion som ska användas med Cognito Pre-SignUp-triggern med följande kod:

import { APIGatewayEventDefaultAuthorizerContext, APIGatewayProxyEvent, APIGatewayProxyResult } from 'aws-lambda';

export async function PreSignup(event: any, context: APIGatewayEventDefaultAuthorizerContext,) {
  console.log("...event:", event);
  console.log("...context:", context);

  let userName = event.userName;
  let email = event.request.userAttributes.email;

  console.log("...userName:", userName);
  console.log("...email:", email);

  // Confirming the event so Cogntio doesnt resend it again:
  event.response.autoConfirmUser = true;
  event.response.autoVerifyPhone = true;
  event.response.autoVerifyEmail = true;
  return event;
}

Istället för att sätta upp event till any med function PreSignup(event: any) skulle jag hellre specificera en typ för eventet.

Jag försökte specificera det som APIGatewayProxyEvent på följande sätt:

function PreSignup(event: APIGatewayProxyEvent, context: APIGatewayEventDefaultAuthorizerContext,) {...}

men det fungerar inte eftersom event som skickas av Cognito Pre Sign-Up-triggern inte är av typen APIGatewayProxyEvent. Vilken typ av händelse är det?

Redigerad senare:

Nedan är kopierat/klistrat in händelse som skickades av Cognito PreSignUp Trigger:

{
  version: '1',
  region: 'us-east-1',
  userPoolId: 'us-east-1_abcdef',
  userName: '[email ',
  callerContext: {
    awsSdkVersion: 'aws-sdk-nodejs-2.799.0',
    clientId: 'CLIENT_ID_NOT_APPLICABLE'
  },
  triggerSource: 'PreSignUp_AdminCreateUser',
  request: {
    userAttributes: { email: '[email ' },
    validationData: null
  },
  response: {
    autoConfirmUser: false,
    autoVerifyEmail: false,
    autoVerifyPhone: false
  }
}

Nedan är ett exempel på ett annat AWS-evenemang, denna gång skickat av AWS EventBridge (liknande det som skickas av Cognito Trigger):

{
  version: '0',
  id: '0ee136cb-ea53-f9e0-a6a9-232dfb78b7d0',
  'detail-type': 'UserCreated',
  source: 'my.company.endpointname',
  account: '123456789012',
  time: '2021-01-29T03:05:54Z',
  region: 'us-east-1',
  resources: [],
  detail: { foo: 'bar', createdAt: 1611889553709 }
}

Svar #1

PreSignUp_SignUp: Din standard Cognito-pool (användarnamn/lösenord) registrering

PreSignUp_AdminCreateUser: När en användare skapas med administratörsmetoden (för att vara tydlig, inte när du skapar en administratör, utan när du som administratör skapar en annan användare).

PreSignUp_ExternalProvider: Om du har registrering via tredje part, som Google eller Facebook

{
   "version":"1",
   "region":"us-east-1",
   "userPoolId":"us-east-1_xxxxxxx",
   "userName":"2d4eb80f-7998-xxxx-xxxx-xxxxxxxxxx",
   "callerContext":{
      "awsSdkVersion":"aws-sdk-unknown-unknown",
      "clientId":"xxxxxxxxxxxxxxxxxxxxxxxxxx"
   },
   "triggerSource":"PreSignUp_SignUp",
   "request":{
      "userAttributes":{
         "email":"[email "
      },
      "validationData":null
   },
   "response":{
      "autoConfirmUser":false,
      "autoVerifyEmail":false,
      "autoVerifyPhone":false
   }
}
    {
       "version":"1",
       "region":"us-east-1",
       "userPoolId":"us-east-1_xxxxxxxxxxx",
       "userName":"efce8c11-e0ff-4400-xxxx-xxxxxxxxxx",
       "callerContext":{
          "awsSdkVersion":"aws-sdk-java-1.11.856",
          "clientId":"CLIENT_ID_NOT_APPLICABLE"
       },
       "triggerSource":"PreSignUp_AdminCreateUser",
       "request":{
          "userAttributes":{
             "email_verified":"true",
             "email":"[email "
          },
          "validationData":null
       },
       "response":{
          "autoConfirmUser":false,
          "autoVerifyEmail":false,
          "autoVerifyPhone":false
       }
    }
    
      {
         "version":"1",
         "region":"us-east-1",
         "userPoolId":"us-east-1_xxxxxx",
         "userName":"Google_xxxxxxxxxxxxxxxxxxxxx",
         "callerContext":{
            "awsSdkVersion":"aws-sdk-unknown-unknown",
            "clientId":"xxxxxxxxxxxxxxxxxxxxxxxxxx"
         },
         "triggerSource":"PreSignUp_ExternalProvider",
         "request":{
            "userAttributes":{
               "email_verified":"false",
               "cognito:email_alias":"",
               "cognito:phone_number_alias":"",
               "email":"[email "
            },
            "validationData":{
               
            }
         },
         "response":{
            "autoConfirmUser":false,
            "autoVerifyEmail":false,
            "autoVerifyPhone":false
         }
      }
      

      Svar #2

      Vilken typ av evenemang är det?

      Det är en PreSignUpTriggerEvent. Du kan importera den från "aws-lambda".

      Om du också vill ställa in rätt typ för context- och callback-objekten automatiskt kan du istället ställa in typen på hela hanteringsfunktionen till PreSignUpTriggerHandler och alla argument skulle ha de lämpliga typerna.

      Exempel :

      import {PreSignUpTriggerHandler} from "aws-lambda";
      
      export const handler: PreSignUpTriggerHandler = async (event, context, callback) => {
         // code
      }
      
      • event är av typen PreSignUpTriggerEvent
      • context är av typen Context
      • callback är av typen Callback<any>

      Ett annat exempel:

      import {PreSignUpTriggerEvent, Context, Callback} from "aws-lambda";
      
      export const handler = async (event: PreSignUpTriggerEvent, context: Context, callback: Callback<any>) => {
         // code
      }
      

      Relaterade artiklar