ユーザー登録の「門番」を理解しよう!
入会希望者が来たら、
まず
審査員
が
チェックする
ユーザー登録時に、
まず
Lambda関数
が
チェックする
メールアドレスやパスワードを持って、クラブ(アプリ)に入りたい人
ユーザーが入力した情報(メール、電話番号、カスタム属性など)
申込書をチェックして「OK」か「NG」か判断する人
「このドメインのメールだけOK」「この国からはNG」などのルール
メールアドレス、パスワード、その他の情報を入力してサインアップボタンをクリック
User Pool がサインアップリクエストを受け取る
Cognitoがユーザーを作成する 前に 、Lambda関数が実行される。ここでカスタム検証やデータ変更が可能!
✅ 許可
:サインアップ続行
❌ 拒否
:エラーを返してサインアップ中止
ユーザーにメールまたはSMSで確認コードが送信される(自動確認を設定した場合はスキップ可能)
特定のドメインのメールアドレスのみ登録を許可する
特定の国や地域からの登録を許可または拒否する
特定条件を満たすユーザーの確認をスキップする
外部システムと照合してユーザーを検証する
一時メールサービスからの登録をブロックする
登録時にユーザー属性を自動的に設定・変更する
{
"version": "1",
"triggerSource": "PreSignUp_SignUp",
"region": "ap-northeast-1",
"userPoolId": "ap-northeast-1_XXXXXXXX",
"userName": "test-user-123",
"callerContext": {
"awsSdkVersion": "aws-sdk-js-2.xxx.x",
"clientId": "1abc2defghijk3lmnop4qrst"
},
"request": {
"userAttributes": {
"email": "user@example.com",
"phone_number": "+819012345678",
"custom:department": "Engineering"
},
"validationData": { // クライアントから送られた検証用データ },
"clientMetadata": { // クライアントから送られたメタデータ }
},
"response": {
"autoConfirmUser": false,
"autoVerifyPhone": false,
"autoVerifyEmail": false
}
}
PreSignUp_SignUp
(通常)、
PreSignUp_AdminCreateUser
(管理者作成)、
PreSignUp_ExternalProvider
(外部IdP)など
ユーザーを自動的に確認済みにする
信頼済みドメイン(@company.com)からの登録は確認コード不要にする
メールアドレスを自動的に検証済みにする
外部IdP(Google、Facebook)経由の登録時にメールを自動検証
電話番号を自動的に検証済みにする
電話番号確認済みの外部サービスと連携している場合
Lambda関数内でエラーをスロー(throw)すると、サインアップが拒否されます
// サインアップを拒否する例 throw new Error("このメールドメインは登録できません"); // ユーザーにはこのエラーメッセージが表示されます
// Node.js Lambda 関数 exports.handler = async (event) => { // 許可するドメインのリスト const allowedDomains = ['example.com', 'example.co.jp']; // ユーザーのメールアドレスを取得 const email = event.request.userAttributes.email; const domain = email.split('@')[1]; // ドメインチェック if (!allowedDomains.includes(domain)) { throw new Error(`許可されていないドメインです: ${domain}`); } // OKの場合はeventをそのまま返す return event; };
// Node.js Lambda 関数 exports.handler = async (event) => { // 信頼済みドメインのリスト const trustedDomains = ['trusted.com', 'partner.co.jp']; const email = event.request.userAttributes.email; const domain = email.split('@')[1]; // 信頼済みドメインの場合は自動確認 if (trustedDomains.includes(domain)) { event.response.autoConfirmUser = true; event.response.autoVerifyEmail = true; } return event; };
// Node.js Lambda 関数 const AWS = require('aws-sdk'); const dynamodb = new AWS.DynamoDB.DocumentClient(); exports.handler = async (event) => { const email = event.request.userAttributes.email; // DynamoDBで社員データを検索 const params = { TableName: 'EmployeeTable', Key: { email: email } }; const result = await dynamodb.get(params).promise(); // 社員データが見つからない場合は拒否 if (!result.Item) { throw new Error('このメールアドレスは登録されていません'); } // 部署情報を自動設定 event.request.userAttributes['custom:department'] = result.Item.department; return event; };
| トリガー | タイミング | 主な用途 | ユーザー作成 |
|---|---|---|---|
| Pre Sign-up | ユーザー作成 前 | 検証、登録制限、自動確認 | ❌ まだ作成されていない |
| Post Confirmation | ユーザー確認 後 | ウェルカムメール、初期設定 | ✅ 作成済み・確認済み |
| Pre Authentication | 認証 前 | ログイン制限、追加検証 | ✅ 作成済み |
Pre Sign-up
は「この人を入会させるか?」を判断する
門番
です。
Post Confirmation
は「入会完了後の手続き」を行う
事務係
です。
Pre Authentication
は「毎回のログイン時にチェック」する
警備員
です。
ユーザー登録前にチェックして、許可/拒否を決める
Lambda関数で柔軟にカスタムロジックを実装
ドメイン制限や外部検証でセキュリティを向上
信頼済みユーザーは確認コード不要にできる
Pre Sign-up Lambda = 会員制クラブの
入会審査員
「この人を入れていいか?」を
登録前に
判断する最初の砦!
Created by SSuzuki1063
AWS SAP Learning Resources