資料庫模型
Auth.js 可以與任何資料庫一起使用。模型會告訴你 Auth.js 期望從你的資料庫中取得什麼結構。模型會根據你使用的適配器而略有不同,但一般來說,其結構會與下圖類似。每個模型都可以擴展額外的欄位。
Auth.js 為其資料庫列使用 camelCase
,同時尊重 OAuth 相關值的傳統 snake_case
格式。如果大小寫混合對你來說是個問題,大多數適配器都有關於如何強制執行大小寫慣例的專門文件部分。
使用者
使用者模型用於儲存使用者的姓名和電子郵件地址等資訊。電子郵件地址是選填的,但如果為 User
指定電子郵件地址,則該地址必須是唯一的。
當使用者首次使用身分驗證提供者(OAuth、魔法連結或純憑證)登入時,會在資料庫中自動建立使用者。
OAuth 登入
如果首次登入是透過OAuth 提供者,則預設儲存的資料為 id
、name
、email
和 image
。你可以透過在你的OAuth 提供者的profile()
回呼中返回額外的欄位來新增更多個人資料。
魔法連結登入
如果首次登入是透過電子郵件提供者,則儲存的使用者將具有 id
、email
、emailVerified
,其中 emailVerified
是使用者建立時的時間戳記。
帳戶
帳戶模型用於儲存與 User
相關的帳戶資訊。單一 User
可以有多個 Account
,但每個 Account
只能有一個 User
。
當使用者首次使用身分驗證提供者(OAuth、魔法連結或純憑證)登入時,或呼叫 Adapter.linkAccount
方法時,會在資料庫中自動建立帳戶。
預設儲存的資料為 access_token
、expires_at
、refresh_token
、id_token
、token_type
、scope
和 session_state
。你可以透過在 OAuth 提供者的 account()
回呼中返回額外的欄位來儲存其他欄位或移除不需要的欄位。
Accounts
會自動連結到 User
,前提是它們具有相同的電子郵件地址,並且使用者目前已登入。請查看常見問題,以取得更多關於為什麼這是一項要求的資訊。
如果你的適配器實作了 unlinkAccount
方法,你可以手動取消連結帳戶。請務必採取所有必要的安全措施,以避免資料遺失。
Session
即使你正在使用資料庫,你仍然可以使用 JWT 來進行 Session 處理以快速存取,在這種情況下,可以在你的資料庫中選擇退出此模型。
- 進一步瞭解 Session 策略及其權衡取捨。
Session 模型用於資料庫 Session,它可以為活躍的使用者 Session 儲存任意資料。單一 User
可以有多個 Session
,每個 Session
只能有一個 User
。
讀取 Session 時,會檢查其 expires
欄位,以查看 Session 是否仍然有效。如果已過期,則會從資料庫中刪除 Session。你也可以定期在背景中進行此清理,以避免 Auth.js 在活躍 Session 擷取期間額外呼叫資料庫進行刪除。這可能會稍微提高效能。
驗證令牌
VerificationToken
模型用於儲存基於電子郵件的魔法連結登入的令牌。
單一 User
可以有多個開啟的 VerificationToken
處於活動狀態(例如,使用不同的裝置登入)。
由於使用者在登入流程中忘記或失敗,你可能會在資料庫中產生不需要的列。你可能需要定期清理這些列,以避免資料庫中填滿不必要的資料。
它經過設計,可以擴展到未來用於其他驗證目的(例如,2FA / 魔法碼等)。
Auth.js 確保每個令牌只能使用一次,並且預設具有較短的生命週期(1 天,可由 maxAge
設定)。如果你的使用者未能及時完成登入流程,他們將必須重新開始登入流程。