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 typenPreSignUpTriggerEventcontextär av typenContextcallbackär av typenCallback<any>
Ett annat exempel:
import {PreSignUpTriggerEvent, Context, Callback} from "aws-lambda";
export const handler = async (event: PreSignUpTriggerEvent, context: Context, callback: Callback<any>) => {
// code
}
