数据库模型
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
方法,您可以手动取消关联账户。确保采取所有必要的安全措施以防止数据丢失。
会话
即使您使用的是数据库,您仍然可以使用 **JWT** 进行会话处理,以实现快速访问,在这种情况下,可以在您的数据库中选择退出此模型。
- 了解有关会话策略的更多信息 以及它们的权衡取舍。
会话模型用于数据库会话,它可以为活动用户会话存储任意数据。单个 User
可以拥有多个 Session
,每个 Session
只能拥有一个 User
。
读取会话时,将检查其 expires
字段以查看会话是否仍然有效。如果它已过期,则会从数据库中删除该会话。您也可以定期在后台执行此清理操作,以避免 Auth.js 在检索活动会话期间向数据库发出额外的删除调用。这可能会导致性能略微提升。
验证令牌
VerificationToken
模型用于存储基于电子邮件的 **魔法链接** 登录的令牌。
单个 User
可以拥有多个打开的 VerificationToken
处于活动状态(例如,使用不同的设备登录)。
由于用户忘记或登录流程失败,您最终可能会在数据库中留下不需要的行。您可能希望定期清理它们,以避免数据库因不必要的数据而填满。
它被设计为将来可以扩展以用于其他验证目的(例如,双重身份验证/魔法代码等)。
Auth.js 确保每个令牌只能使用一次,默认情况下,其生命周期很短(1 天,可以通过 maxAge
配置)。如果您的用户没有及时完成登录流程,他们将不得不重新开始登录流程。