外部データベースと Auth0 データストアの比較
- 拡張性: Auth0 データストアの拡張性には限界があり、アプリケーションのデータが適切な上限を超える可能性があります。外部データベースを使用すれば、Auth0 データストアをシンプルに保ちながら、追加データはより効率的な外部データベースに保存できます。
- パフォーマンス: 認証データは、他のデータに比べてアクセス頻度が低いことが一般的です。Auth0 データストアは高頻度の利用向けには最適化されていないため、より頻繁に取得する必要があるデータは別の場所に保存すべきです。
- 柔軟性: Auth0 データストアはユーザープロファイルとそれに関連するメタデータのみを扱うように設計されているため、データベースに対して実行できる操作には制限があります。他のデータ用に別のデータベースを使用すれば、適切な方法でデータを管理でき、Auth0 のを使わずに直接呼び出すこともできます。
- たとえば、Auth0 によって認証された各ユーザーを一覧化する Users テーブルを用意できます。ユーザーがログインするたびに、そのユーザーをテーブル内で検索します。ユーザーが存在しなければ新しいレコードを作成し、存在する場合はすべてのフィールドを更新して、実質的にすべてのユーザーデータのローカルコピーを維持できます。
- あるいは、ユーザーに関連するデータを持つ各テーブル/コレクションにユーザー識別子を保存することもできます。これは、小規模なアプリケーションに適した、よりシンプルな実装です。
ユーザーデータ保存のシナリオ例
メタデータ
アプリのメタデータ
app_metadata に保存するのが適切です。
- ユーザーのサブスクリプションプラン
- 注目のプレイリストを編集する権限の有無
user_metadata ではなく app_metadata に保存する必要があります。
ユーザーメタデータ
user_metadata に保存するのが適切です。
- アプリケーションの設定
- ログイン時のアプリの利用体験を変えるために、ユーザーが選択した項目
app_metadata に保存するデータとは異なり、user_metadata に保存されたこれらの項目は、ユーザー自身が簡単に変更できます。
displayName は、ユーザーがログイン時に目にし、アプリのほかのユーザーにも表示される名前なので、ユーザー自身が変更できるようにできます。
ユーザーがログインするたびにそのユーザーが選んだ識別子を表示するには、user.user_metadata の値を取得するルールを使用します。
displayName を変更する際に使用する画面は、次のとおりです。

user_metadata フィールドを更新するために Update a User エンドポイントを呼び出します。
{yourAccessToken} は、Management API Access Token に置き換えてください。
ユーザーデータの権限制御ルール
Playlist Editorロールを割り当てる
app_metadata の roles 配列に playlist_editor を値として割り当てます。
scope パラメーターでロールを指定する
app_metadata フィールドを取得し、roles 配列をユーザーオブジェクト内のフィールドに割り当てます。これにより、アプリケーションで app_metadata を呼び出さなくてもアクセスできるようになります。すると、ユーザーのログイン時に scope パラメーターで roles を指定でき、app_metadata の内容をすべてユーザーオブジェクトに含める必要がなくなります。
app_metadata に保存されている roles 配列に playlist_editor が含まれている場合、サインイン後の表示は EDITOR になります。

ユーザーの音楽をユーザーに関連付ける
user_id で、authResult 内の idTokenPayload オブジェクトの sub プロパティです。以下は、データベース内の songs テーブルのサンプル行です。
Node.js バックエンドは、 を検証することで、データベースからユーザーの個人データを取得するための URI へのリクエストを認証します。
トークンベースの認証と、アプリケーションで JWT を実装する方法について学びましょう。
以下は、Node.js シードプロジェクトで JWT 検証を実装したコードです。
/secured/getFavGenre への GET リクエストを受信すると、API は queryGenre() 関数を呼び出し、データベースを照会してユーザーのお気に入りのジャンルを返します。
buildAPIRequest() は、リクエストのパスと HTTP メソッドをパラメーターとして受け取り、Heroku でホストされている Node.js API のベース URL を使ってリクエストを構築します。
アプリケーションでは、getGenre() 関数が API にリクエストを送信し、/genres/getFav へのリクエストに対するレスポンスが表示されるようにアプリのインターフェースを変更します。バックエンドは、queryGenre() 関数を使ってこの処理に必要なデータを取得し、その結果をアプリケーションに返します。