外部データベースとAuth0データストア
Auth0データストアは認証データ用にカスタマイズされています。デフォルトのユーザー情報以外のデータ保存は、以下の理由により、限られた場合にのみ行ってください。- スケーラビリティ:Auth0データストアの拡張性は限られており、アプリケーションのデータが適切な限度を超える可能性があります。外部データベースを使用することにより、Auth0データストアをシンプルに保ちつつ、より効率的な外部データベースに追加データを格納することができます。
- パフォーマンス:認証データへのアクセス頻度は、他のデータよりも低い傾向があります。Auth0データストアは高頻度の使用には最適化されていないため、より頻繁に取得されるデータは別の場所に保存する必要があります。
- フレキシビリティ:Auth0データストアはユーザープロファイルと関連するメタデータのみを格納するように構築されているので、データベースで実行できるアクションが制限されています。そのため、他のデータには異なるデータベースを使用することで、データを適切に管理することができます。
- たとえば、Auth0によって認証された各ユーザーを一覧にしたユーザーテーブルを作成することができます。ユーザーがログインするたびに、このテーブルで該当するユーザーを検索します。ユーザーが存在しない場合には、新しいレコードを作成します。存在する場合には、すべてのフィールドを更新して、基本的にすべてのユーザーデータのローカルコピーを保存します。
- もしくは代わりに、ユーザーに関連付けられたデータのある各テーブル/コレクションにユーザー識別子を保存することもできます。これは、小さなアプリケーションに適したシンプルな方法です。
ユーザーデータ保存のシナリオ例
Auth0ではサンプルアプリとしてモバイル音楽アプリケーションを提供しており、Auth0と外部カスタムデータベースを使用したときのエンドツーエンドのユーザーエクスペリエンスを確認できます。このサンプルアプリはAuth0 iOSのシードプロジェクトを活用して作成されたiOSアプリです。バックエンドはNode.js APIを使用しています。 このアプリケーションの全体的な構造のビジュアライゼーションについては、モバイル+APIアーキテクチャシナリオを参照してください。メタデータ
アプリメタデータ
モバイル音楽アプリケーションの以下のデータポイントを保存する場所としては、app_metadata
が適しています。
- ユーザーのサブスクリプションプラン
- おすすめのプレイリストを編集するユーザーの権限の有無
user_metadata
ではなくapp_metadata
に保存しなければなりません。
ユーザーメタデータ
モバイル音楽アプリケーションの以下のデータポイントを保存する場所としては、user_metadata
が適しています。
- アプリケーションの環境設定
- ログイン時のアプリのエクスペリエンスを変更するためにユーザーが選択した詳細
app_metadata
のデータポイントとは異なり、user_metadata
に保存されたこれらの情報はユーザーが簡単に変更できます。
ユーザーがログイン時に目にし、アプリの他のユーザーに表示されるユーザー名、displayName
をユーザーが変更できるようにすることもできます。
ユーザーが選択した識別子をログイン時に表示するには、ルールを使用してuser.user_metadata
値を取得します。
displayName
を変更するために使用する画面はこのようになります。

user_metadata
フィールドが更新されます。
{yourAccessToken}
をManagement APIアクセストークンに置き換える必要があります。
ユーザーデータの権限ルール
ルールを使用して、ユーザーがおすすめのプレイリストを編集できるかどうかを決める権限を実装します。プレイリスト編集者ロールを割り当てる
1つめのルールは、Node APIに要求を送信し、Node APIはHerokuに接続されたデータベースにクエリを実行して、ユーザーのプレイリストの再生回数を確認します。回数が100以上の場合は、app_metadata
のroles
配列の値としてplaylist_editor
が割り当てられます。
スコープパラメーターがロールを指定する
2つめのルールは、app_metadata
フィールドを取得して、ユーザーオブジェクトのフィールドにroles
配列を割り当てます。これにより、アプリケーションでapp_metadata
を呼び出すことなくアクセスできるようになります。これでscope
パラメーターは、ユーザーオブジェクトのapp_metadata
のすべてを含めることなく、ユーザーのログイン時にroles
を指定できます。
app_metadata
に保存されているroles
配列にplaylist_editor
がある場合、ユーザーにはサインイン後に**EDITOR(編集者)**向けの画面が表示されます。

ユーザーの音楽をユーザーに関連付ける
このアプリでは、ユーザーの音楽をユーザーに関連付ける必要がありますが、この情報は認証には必要ありません。この非認証情報をアプリケーションのバックエンドと統合された個別のデータベースに保存する方法を説明します。 ユーザーの一意の識別子はuser_id
です。データベースのsongs
テーブルにあるサンプル行がこちらです。
song_id | songname | user_id |
---|---|---|
1 | No.1ヒットソング | google-oauth2 |
/secured/getFavGenre
へのGET
要求を受信したら、APIがqueryGenre()
関数を呼び出し、データベースを照会してユーザーの好きなジャンルで応答します。
buildAPIRequest()
関数は、要求のパスとHTTPメソッドをパラメーターとして受け取り、HerokuでホストされているNode.js APIのベースURLを使用して要求を構築します。
アプリケーションでは、getGenre()
関数がAPIに要求を送信し、アプリのインターフェイスを変更して/genres/getFav
への要求の応答を表示します。バックエンドはこのアクションに必要なデータをqueryGenre()
関数を使用して取得し、結果をアプリケーションに返します。