認証 Triggers
認証triggerは、ユーザーが認証プロバイダと対話するときに起動します。 認証トリガー を使用して、高度なユーザー管理を実装できます。 一部の用途には、次のようなものがあります。
連結クラスターへの新しいユーザー データの保存
ユーザー削除時のデータの整合性の維持
ログイン時にユーザーの情報を使用してサービスを呼び出します。
認証trigger作成する
UIで認証 設定画面を開くには、左側のナビゲーションtrigger Atlas App ServicesTriggersメニューで [0}]Create a Trigger をクリックし、[] をクリックし、Authentication の横にある [ ]Trigger Type タブを選択します。
triggerを構成し、ページの下部にあるSaveをクリックして、現在の配置ドラフトに追加します。
を使用して認証trigger App Services CLIを作成するには、次の手順に従います。
構成
認証トリガーには、次の構成オプションがあります。
フィールド | 説明 |
---|---|
Trigger Type | trigger の種類。 認証トリガーの場合は、この値を |
Action Type | trigger を起動させる認証操作の種類。 |
Providers | |
Event Type | trigger が起動したときに実行されるアクションを選択します。 関数を実行するか、 AWS Eventbridgeを使用するかを選択できます。 |
Function | |
Trigger Name | triggerの名前。 |
認証イベント
認証 イベントは、認証プロバイダーとユーザーのインタラクションを表します。 各イベントは、次のいずれかの操作タイプを持つ 1 人のユーザー アクションに対応します。
操作タイプ | 説明 |
---|---|
| ログインするユーザーの単一のインスタンスを表します。 |
| 新しいユーザーの作成を表します。 |
| ユーザーの削除を表します。 |
認証イベント オブジェクトの形式は次のとおりです。
{ "operationType": <string>, "providers": <array of strings>, "user": <user object>, "time": <ISODate> }
フィールド | 説明 |
---|---|
| |
| イベントを発行した認証プロバイダ。 次のいずれかの名前は、各認証プロバイダを表します。
注意通常、各イベントを発行する認証プロバイダは 1 つだけです。 ただし、複数のプロバイダーにリンクされたユーザーを削除する必要がある場合があります。 この場合、そのユーザーの |
| 認証プロバイダと対話したユーザーのユーザー オブジェクト。 |
| イベントが発生した時刻。 |
例
あるオンラインショップが、各カスタマーのカスタム メタデータをAtlasに保存したいと考えています。 各カスタマーには、 store.customers
コレクション内のドキュメントが必要です。 その後、店舗はカスタマーの ドキュメントでメタデータを記録し、クエリを実行できます。
コレクションは各カスタマーを表す必要があります。 これを保証するために、店舗は 認証triggerを作成します。 このtriggerは、メール/パスワード認証プロバイダーで新しく作成されたユーザーをリッスンします。 次に、認証イベント オブジェクトをリンクされた関数であるcreateNewUserDocument
に渡します。 この関数は、ユーザーとそのアクティビティを説明する新しいドキュメントを作成します。 次に、関数はドキュメントをstore.customers
コレクションに挿入します。
{ "type": "AUTHENTICATION", "name": "newUserHandler", "function_name": "createNewUserDocument", "config": { "providers": ["local-userpass"], "operation_type": "CREATE" }, "disabled": false }
exports = async function(authEvent) { const mongodb = context.services.get("mongodb-atlas"); const customers = mongodb.db("store").collection("customers"); const { user, time } = authEvent; const isLinkedUser = user.identities.length > 1; if(isLinkedUser) { const { identities } = user; return users.updateOne( { id: user.id }, { $set: { identities } } ) } else { return users.insertOne({ _id: user.id, ...user }) .catch(console.error) } await customers.insertOne(newUser); }
その他の例
App Services App に統合された Triggers の追加例については、 Github の Triggers の例を確認してください。