コンテンツへスキップ
NextAuth.js v4からの移行?こちらをご覧ください 移行ガイド.
概念データベースモデル

データベースモデル

Auth.jsは任意のデータベースで使用できます。モデルは、Auth.jsがデータベースから期待する構造を示しています。モデルは使用するアダプターによって多少異なりますが、一般的には以下のグラフに似た構造になります。各モデルは、追加のフィールドで拡張できます。

Auth.jsはデータベース行にcamelCaseを使用しますが、OAuth関連の値には従来のsnake_caseフォーマットを尊重します。混合ケースが問題になる場合は、ほとんどのアダプターに、ケース表記規則を強制する方法に関する専用のドキュメントセクションがあります。


ユーザー

ユーザーモデルは、ユーザーの名前やメールアドレスなどの情報用です。メールアドレスはオプションですが、Userに指定されている場合は、一意である必要があります。

💡

データベースでのユーザー作成は自動で行われ、ユーザーが初めて認証プロバイダー(OAuth、マジックリンク、またはプレーンな資格情報)でログインしたときに発生します。

OAuthサインイン

最初のサインインがOAuthプロバイダーによる場合、保存されるデフォルトのデータはidnameemailimageです。 OAuthプロバイダーprofile()コールバックで追加のフィールドを返すことで、より多くのプロファイルデータを追加できます。

マジックリンクサインイン

最初のサインインがメールプロバイダーによる場合、保存されるユーザーにはidemailemailVerifiedが含まれ、emailVerifiedはユーザーが作成されたタイムスタンプになります。

アカウント

アカウントモデルは、Userに関連付けられたアカウントに関する情報用です。単一のUserには複数のAccountを持つことができますが、各Accountは1つのUserしか持つことができません。

💡

データベースでのアカウント作成は自動で行われ、ユーザーが初めて認証プロバイダー(OAuth、マジックリンク、またはプレーンな資格情報)でログインしたとき、またはAdapter.linkAccountメソッドが呼び出されたときに発生します。

保存されるデフォルトのデータはaccess_tokenexpires_atrefresh_tokenid_tokentoken_typescopesession_stateです。OAuthプロバイダーaccount()コールバックで返すことで、他のフィールドを保存したり、不要なフィールドを削除したりできます。

AccountUserにリンクする処理は、メールアドレスが同じ場合、ユーザーが現在サインインしている場合にのみ自動的に行われます。この要件の理由については、FAQを参照してください。

アダプターがunlinkAccountメソッドを実装している場合は、アカウントを手動でリンク解除できます。データ損失を避けるために、必要なセキュリティ対策をすべて行ってください。

セッション

データベースを使用している場合でも、高速アクセスのためセッション処理に**JWT**を使用できます。その場合、このモデルはデータベースでオプトアウトできます。

セッションモデルはデータベースセッションに使用され、アクティブなユーザーセッションの任意のデータを保存できます。単一のUserには複数のSessionを持つことができますが、各Sessionは1つのUserしか持つことができません。

セッションが読み取られると、そのexpiresフィールドがチェックされ、セッションがまだ有効かどうかが確認されます。期限切れの場合は、セッションがデータベースから削除されます。アクティブなセッションの取得中にAuth.jsがデータベースに追加の削除呼び出しを行うのを避けるために、バックグラウンドで定期的にこのクリーンアップを実行することもできます。これにより、パフォーマンスがわずかに向上する可能性があります。

検証トークン

VerificationTokenモデルは、メールベースの**マジックリンク**サインインのトークンを保存するために使用されます。

単一のUserは、複数の開いているVerificationTokenをアクティブにすることができます(例:異なるデバイスでのサインイン)。

💡

ユーザーが忘れたり、サインインフロー中に失敗したりすると、データベースに不要な行が残ってしまう可能性があります。データベースに不要なデータが蓄積されるのを防ぐために、定期的にこれらのデータをクリーンアップすることをお勧めします。

将来、他の検証目的(例:2FA/マジックコードなど)に拡張できるように設計されています。

Auth.jsは、各トークンが一度だけ使用可能であり、デフォルトでは短い有効期間(1日、maxAgeで構成可能)を持つようにします。ユーザーが時間内にサインインフローを完了できなかった場合は、サインインプロセスをやり直す必要があります。

Auth.js © Balázs Orbán and Team -2024