認証 Triggers
認証triggerは、ユーザーが認証プロバイダと対話するときに起動します。 認証トリガー を使用して、高度なユーザー管理を実装できます。 一部の用途には、次のようなものがあります。
連結クラスターへの新しいユーザー データの保存
ユーザー削除時のデータの整合性の維持
ログイン時にユーザーの情報を使用してサービスを呼び出します。
認証trigger作成する
UIで認証 設定画面を開くには、左側のナビゲーションtrigger Atlas App ServicesTriggersCreate a TriggerメニューでAuthentication [0] をクリックし、[]Trigger Type をクリックして、 の横にある [ ] タブを選択します。
triggerを構成し、ページの下部にあるSaveをクリックして、現在の配置ドラフトに追加します。
を使用して認証trigger App Services CLIを作成するには、次の手順に従います。
認証 設定ファイル を、ローカル アプリケーションtrigger ディレクトリの {2 サブディレクトリに追加します。
triggers
注意
App Services では、Atlas trigger 構成ファイルに特定のファイル名は強制されません。 ただし、インポートされると、App Services は、定義する trigger の名前と一致するように各構成ファイルの名前を変更します(たとえば、
mytrigger.json
。triggerを配置する:
appservices push
構成
認証トリガーには、次の構成オプションがあります。
フィールド | 説明 |
---|---|
Trigger Type | trigger の種類。 認証トリガーの場合は、この値を AUTHENTICATION に設定します。 |
Action Type | trigger を起動させる認証操作の種類。 |
Providers | |
Event Type | trigger が起動したときに実行されるアクションを選択します。 関数を実行するか、 AWS Eventbridgeを使用するかを選択できます。 |
Function | trigger が起動時に実行する関数の名前。 認証イベント オブジェクトによって trigger が起動します。 このオブジェクトは、trigger が関数に渡す唯一の引数です。 |
Trigger Name | triggerの名前。 |
認証イベント
認証 イベントは、認証プロバイダーとユーザーのインタラクションを表します。 各イベントは、次のいずれかの操作タイプを持つ 1 人のユーザー アクションに対応します。
操作タイプ | 説明 |
---|---|
LOGIN | ログインするユーザーの単一のインスタンスを表します。 |
CREATE | 新しいユーザーの作成を表します。 |
DELETE | ユーザーの削除を表します。 |
認証イベント オブジェクトの形式は次のとおりです。
{ "operationType": <string>, "providers": <array of strings>, "user": <user object>, "time": <ISODate> }
フィールド | 説明 |
---|---|
operationType | 認証イベントの操作タイプ。 |
providers | イベントを発行した認証プロバイダ。 次のいずれかの名前は、各認証プロバイダを表します。
注意通常、各イベントを発行する認証プロバイダは 1 つだけです。 ただし、複数のプロバイダーにリンクされたユーザーを削除する必要がある場合があります。 この場合、そのユーザーの |
user | 認証プロバイダと対話したユーザーのユーザー オブジェクト。 |
time | イベントが発生した時刻。 |
例
あるオンラインショップが、各カスタマーのカスタム メタデータを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 に統合された trigger の追加例については、 Githubの Triggers の例を確認してください。