【发布时间】:2012-06-21 13:12:58
【问题描述】:
我即将构建我的 node.js / express / mongoose / passport 应用程序,我正在考虑正确的 schema 设计用户和帐户。
会有用户从 twitter 和 facebook 以及本地帐户登录。在稍后阶段,我希望用户将 twitter 和 facebook 与我的应用程序(甚至更多外部帐户)连接起来。
对于这种情况,我想不出一个好的解决方案。以下是我正在考虑的选项:
1.拥有档案模型和账户模型。 Profile 文档代表唯一的用户,而帐户提供用户名和密码(内部帐户)或来自 auth-provider(外部帐户)的身份验证数据。个人资料必须至少有一个嵌套帐户文档。
var ExtAccountSchema = new Schema({
type: String, // eg. twitter, facebook, native
uid: String
});
var IntAccountSchema = new Schema({
username: String,
password: String
});
var ProfileSchema = new Schema({
firstname: String,
lastname: String,
email: String,
accounts: [Account] // Pushing all the accounts in there
});
我不喜欢的是由于不同的帐户数据导致的帐户文档不一致,而且当我的用户登录时我很难找到正确的帐户(在嵌套文档中搜索 uid 和帐户类型 -.- )
2.将所有数据保存在单个模型
中var ProfileSchema = new Schema({
firstname: String,
lastname: String,
email: String,
twitter-uid: String,
facebook-uid: String
password: String
});
这很丑 -.- 找到正确的帐户数据可能更容易/更快,但维护起来并不好。
有没有更好的解决方案? 有最佳做法吗?
【问题讨论】:
-
与关系数据库不同,MongoDB 的最佳架构设计很大程度上取决于您将如何访问数据。您会将帐户数据用于什么目的,您将如何访问这些数据?
-
我将使用帐户数据进行护照身份验证。个人资料数据将在几乎每个页面上以多种用途访问。我将通过 mongoose ODM 访问它
-
所以只有在用户登录时才能访问帐户数据,并且一旦发生这种情况,您将使用会话机制来跟踪登录? (而不是在每次访问页面时都需要帐户数据。)
-
我需要每个页面上的用户数据。但我不确定如何构建它。在我的示例中,我将数据分为帐户和个人资料。所以我可以随时访问个人资料和帐户,只为登录。
标签: mongodb express mongoose passport.js