Looking for how to use this in your app?See Frontend Libraries →
ユーザープロフィールレコードを作成する
defineAuth と defineFunction を使用して、Cognito ポスト確認 Lambda トリガーを作成し、ユーザーが確認されたときにプロフィールレコードを作成できます。
まず、ハンドラータイプを定義するために使用される aws-lambda パッケージをインストールします。
Terminal
npm add --save-dev @types/aws-lambdaamplify/data/resource.ts ファイルを更新して、ユーザーのプロフィール用のデータモデルを定義します。
amplify/data/resource.ts
import { type ClientSchema, a, defineData } from "@aws-amplify/backend";import { postConfirmation } from "../auth/post-confirmation/resource";
const schema = a .schema({ UserProfile: a .model({ email: a.string(), profileOwner: a.string(), }) .authorization((allow) => [ allow.ownerDefinedIn("profileOwner"), ]), }) .authorization((allow) => [allow.resource(postConfirmation)]);export type Schema = ClientSchema<typeof schema>;
export const data = defineData({ schema, authorizationModes: { defaultAuthorizationMode: "apiKey", apiKeyAuthorizationMode: { expiresInDays: 30, }, },});新しいディレクトリとリソースファイル amplify/auth/post-confirmation/resource.ts を作成します。次に、defineFunction を使用して Function を定義します。
amplify/auth/post-confirmation/resource.ts
import { defineFunction } from '@aws-amplify/backend';
export const postConfirmation = defineFunction({ name: 'post-confirmation',});次に、対応するハンドラーファイル amplify/auth/post-confirmation/handler.ts を以下の内容で作成します。
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;};最後に、新しく作成した Function リソースを認証リソースに設定します。
amplify/auth/resource.ts
import { defineAuth } from '@aws-amplify/backend';import { postConfirmation } from './post-confirmation/resource';
export const auth = defineAuth({ loginWith: { email: true, }, triggers: { postConfirmation }});変更をデプロイした後、ユーザーがサインアップしてアカウントを確認するたびに、プロフィールレコードが自動的に作成されます。