Home > Blockchain >  Lambda functions do not trigger after cognito events
Lambda functions do not trigger after cognito events

Time:10-21

I'm trying to implement an authentication workflow using AWS Cognito in order to sync my users table (Hasura graphql backend) with Cognito users, but the post confirmation Lambda does not trigger. The code of the Lambda function is as follow:

const axios = require('axios');

exports.handler = async (event,context,callback) => {
  console.log(event);
  const id=event.request.userAttributes.sub;
  const name=event.request.userAttributes.username;
  const email=event.request.userAttributes.email;
  
  const hasuraAdminSecret="####"
  const graphAPI="####"
  const body = {
    query: `
    mutation insertUsers($userId: String!, $userName: String!, $userEmail: String!) {
    insert_users(objects: {cognito_id: $userId, email: $userEmail, username: $userName}) {
      affected_rows
    }
  }
  `,
    variables: {
      userId:id,
      userEmail:name,
      userName:email
    }
  }
  var  response = {};
  await axios.post(graphAPI, body, {
    headers: {'content-type' : 'application/json', 'x-hasura-admin-secret': hasuraAdminSecret}
    })
  .catch(err => {
    console.error(err.data);
    response=err.data;
  })
  .then(res => {
    console.log(res.data);
    response = res.data;
  })
  
  callback(null,event);
}

The code for the signup and the confirmation pages are as follow:

import { Auth } from 'aws-amplify';
export default {
    name:'Signin',
    data(){
        return {
            username: undefined,
            email: undefined,
            password: undefined,
            code: undefined,
            user: undefined,
        }
    },
    methods: {
        confirm() {
            // After retrieveing the confirmation code from the user
            Auth.confirmSignUp(this.username, this.code, {
                // Optional. Force user confirmation irrespective of existing alias. By default set to True.
                forceAliasCreation: false
            }).then(this.$router.push("/"))
              .catch(err => console.log(err));
        },
        signup(){
            Auth.signUp({
                username:this.username,
                password: this.password,
                attributes: {
                    email: this.email,
                    name:this.username
                },
                validationData: [],  // optional
                })
                .then(data => this.user = data.user)
                .catch(err => console.log(err));
        }
    }
    
}

When signing up the user is created and confirmed in the AWS console, but the lambda function is not triggered (no logs in Cloudwatch and no errors from Cognito). Where should I look ?

CodePudding user response:

Once the new user signup through aws-cognito you can call lambda functions using trigger

Step 1: Open your aws-cognito User Pools under general setting click on trigger

enter image description here

Step 2: You can customise the workflow with triggers. You can call your lambda function

  • Pre sign-up
  • Pre authentication
  • Custom message
  • Post authentication
  • Post confirmation
  • Define Auth Challenge
  • Create Auth Challenge
  • Verify Auth Challenge
  • User Migration
  • Pre Token Generation

Step 3: Select your workflow trigger Post confirmation and you can see the list of lambda functions. You have to select the lambda function. enter image description here

  • Related