跳至內容
從 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 只能有一個 User

💡

當使用者首次使用身分驗證提供者(OAuth、魔法連結或純憑證)登入時,或呼叫 Adapter.linkAccount 方法時,會在資料庫中自動建立帳戶。

預設儲存的資料為 access_tokenexpires_atrefresh_tokenid_tokentoken_typescopesession_state。你可以透過在 OAuth 提供者account() 回呼中返回額外的欄位來儲存其他欄位或移除不需要的欄位。

Accounts 會自動連結到 User,前提是它們具有相同的電子郵件地址,並且使用者目前已登入。請查看常見問題,以取得更多關於為什麼這是一項要求的資訊。

如果你的適配器實作了 unlinkAccount 方法,你可以手動取消連結帳戶。請務必採取所有必要的安全措施,以避免資料遺失。

Session

即使你正在使用資料庫,你仍然可以使用 JWT 來進行 Session 處理以快速存取,在這種情況下,可以在你的資料庫中選擇退出此模型。

Session 模型用於資料庫 Session,它可以為活躍的使用者 Session 儲存任意資料。單一 User 可以有多個 Session,每個 Session 只能有一個 User

讀取 Session 時,會檢查其 expires 欄位,以查看 Session 是否仍然有效。如果已過期,則會從資料庫中刪除 Session。你也可以定期在背景中進行此清理,以避免 Auth.js 在活躍 Session 擷取期間額外呼叫資料庫進行刪除。這可能會稍微提高效能。

驗證令牌

VerificationToken 模型用於儲存基於電子郵件的魔法連結登入的令牌。

單一 User 可以有多個開啟的 VerificationToken 處於活動狀態(例如,使用不同的裝置登入)。

💡

由於使用者在登入流程中忘記或失敗,你可能會在資料庫中產生不需要的列。你可能需要定期清理這些列,以避免資料庫中填滿不必要的資料。

它經過設計,可以擴展到未來用於其他驗證目的(例如,2FA / 魔法碼等)。

Auth.js 確保每個令牌只能使用一次,並且預設具有較短的生命週期(1 天,可由 maxAge 設定)。如果你的使用者未能及時完成登入流程,他們將必須重新開始登入流程。

Auth.js © Balázs Orbán 和團隊 -2024