Lambda 函数不会在 Cognito 事件后触发

Lambda functions do not trigger after cognito events

我正在尝试使用 AWS Cognito 实施身份验证工作流程,以便将我的用户 table(Hasura graphql 后端)与 Cognito 用户同步,但 post 确认 Lambda 不会触发。 Lambda函数的代码如下:

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);
}

注册和确认页面的代码如下:

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));
        }
    }
    
}

注册时,在 AWS 控制台中创建并确认了用户,但未触发 lambda 函数(Cloudwatch 中无日志,Cognito 中无错误)。我应该去哪里看?

一旦新用户 signupaws-cognito 您可以使用 trigger

调用 lambda functions

第 1 步: 打开 aws-cognito User Poolsgeneral setting 下点击 trigger

第 2 步: 您可以自定义 workflowtriggers。您可以调用 lambda 函数

  • 预注册
  • 预认证
  • 自定义消息
  • Post 认证
  • Post确认
  • 定义身份验证质询
  • 创建身份验证挑战
  • 验证授权挑战
  • 用户迁移
  • 令牌生成前

第 3 步: Select 您的工作流程触发器 Post confirmation 您可以看到 lambda 函数。您必须 select lambda 函数。

添加 Cloudwatch:

第 1 步: 您已在 Permissions 选项卡下的 Configuration 下添加角色

第 2 步: 编辑 role 并为 CloudWatch 附加 policyCloudWatch Logs