我正在关注thisAmplify Gen 2文档来触发后确认功能。一旦用户验证其帐户并创建与新用户关联的新
UserProfile
实体,它就应该在身份验证流程中执行。部署更改后,该功能不会被触发。下面是我的 post-confirmation
lambda 设置。
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)]);
amplify/auth/post-confirmation/resource.ts
并创建defineFunction
函数import { defineFunction } from '@aws-amplify/backend';
export const postConfirmation = defineFunction({
name: 'post-confirmation',
});
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;
};
amplify/auth/resource.ts
中创建新触发器以自定义身份验证流程export const auth = defineAuth({
...
triggers: {
postConfirmation
}
});
根据文档,“您可以使用
defineAuth
和 defineFunction
创建 Cognito 确认后 Lambda 触发器,以便在用户确认时创建个人资料记录。”因此,当用户注册并验证其帐户时,应该触发该功能,而 atm 不会发生这种情况。
我在 SO 上发现了一些类似的问题,但大多数都有 3 岁以上的历史,并且是 Amplify Gen 1,并且 GitHub 上似乎也没有任何相关的 Gen 2 相关信息
关于为什么在身份验证流程中没有触发该功能有什么想法吗?
正如@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'
...
})
...
})
...