放大后确认不会触发lambda函数

问题描述 投票:0回答:1

我正在关注thisAmplify Gen 2文档来触发后确认功能。一旦用户验证其帐户并创建与新用户关联的新

UserProfile
实体,它就应该在身份验证流程中执行。部署更改后,该功能不会被触发。下面是我的
post-confirmation
lambda 设置。

  1. 更新定义用户个人资料的数据模型
    amplify/data/resource.ts
const schema = a.schema({ 
  UserProfile: a 
    .model({
      name: a.string().required(),
      profileOwner: a.string(),
      ...
    })
    .authorization(allow => [
      allow.ownerDefinedIn('profileOwner')
    ]
  ),
  ...
})
.authorization((allow) => [allow.resource(postConfirmation)]);
  1. 创建新目录和资源
    amplify/auth/post-confirmation/resource.ts
    并创建
    defineFunction
    函数
import { defineFunction } from '@aws-amplify/backend';

export const postConfirmation = defineFunction({
  name: 'post-confirmation',
});
  1. 创建处理程序文件
    amplify/auth/post-confirmation/handler.ts
import type { PostConfirmationTriggerHandler } from "aws-lambda";
import { type Schema } from "../../data/resource";
import { Amplify } from "aws-amplify";
import { generateClient } from "aws-amplify/data";
import { getAmplifyDataClientConfig } from '@aws-amplify/backend/function/runtime';
import { env } from "$amplify/env/post-confirmation";

const { resourceConfig, libraryOptions } = await getAmplifyDataClientConfig(
  env
);

Amplify.configure(resourceConfig, libraryOptions);

const client = generateClient<Schema>();

export const handler: PostConfirmationTriggerHandler = async (event) => {
  await client.models.UserProfile.create({
      email: event.request.userAttributes.email,
      profileOwner: `${event.request.userAttributes.sub}::${event.userName}`,
  });

  return event;
};
  1. amplify/auth/resource.ts
    中创建新触发器以自定义身份验证流程
export const auth = defineAuth({
  ...
  triggers: {
    postConfirmation
  }
});

根据文档,“您可以使用

defineAuth
defineFunction
创建 Cognito 确认后 Lambda 触发器,以便在用户确认时创建个人资料记录。”因此,当用户注册并验证其帐户时,应该触发该功能,而 atm 不会发生这种情况。

我在 SO 上发现了一些类似的问题,但大多数都有 3 岁以上的历史,并且是 Amplify Gen 1,并且 GitHub 上似乎也没有任何相关的 Gen 2 相关信息

关于为什么在身份验证流程中没有触发该功能有什么想法吗?

aws-lambda aws-amplify
1个回答
0
投票

正如@rw_指出的,我在

amplify/auth/post-confirmation/handler.ts
中创建的UserProfile.create和在
amplify/data/resource.ts
中定义的UserProfile具有不同的属性。我更新了 UserProfile 模型并将名称更改为电子邮件。这使得该功能工作

amplify/data/resource.ts

const schema = a.schema({ 
  UserProfile: a 
    .model({
      email: a.string().required() // changed from 'name'
      ...
    })
    ...
})
...
© www.soinside.com 2019 - 2024. All rights reserved.