Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mongodb 什么';这是模块化用户模式的最佳方式,以便;s通用_Mongodb_Database Design_Schema_Database Schema_Database - Fatal编程技术网

Mongodb 什么';这是模块化用户模式的最佳方式,以便;s通用

Mongodb 什么';这是模块化用户模式的最佳方式,以便;s通用,mongodb,database-design,schema,database-schema,database,Mongodb,Database Design,Schema,Database Schema,Database,我有一个数据库设计问题。基本上,我希望能够为一个用户模型创建一个模式,然后在扩展用户模型的其他模型中使用这个用户模型,但我希望以一种通用的方式设计它,使它能够在每个应用程序中使用 例如,配置文件或帐户模型可能会扩展用户,在这两种情况下,它们将根据您正在设计的web应用程序而有所不同,但用户的核心凭据在任何web应用程序中都不应不同 您认为用户模型中应该包含哪些字段 我认为成功处理身份验证的最低要求是: 电子邮件(登录唯一标识符) 盐(显然!) 密码(duh) lostToken(验证密码丢失功

我有一个数据库设计问题。基本上,我希望能够为一个用户模型创建一个模式,然后在扩展用户模型的其他模型中使用这个用户模型,但我希望以一种通用的方式设计它,使它能够在每个应用程序中使用

例如,配置文件或帐户模型可能会扩展用户,在这两种情况下,它们将根据您正在设计的web应用程序而有所不同,但用户的核心凭据在任何web应用程序中都不应不同

您认为用户模型中应该包含哪些字段

我认为成功处理身份验证的最低要求是:

  • 电子邮件(登录唯一标识符)
  • 盐(显然!)
  • 密码(duh)
  • lostToken(验证密码丢失功能的哈希)
  • 角色(成员、管理员、编辑等。在我看来,不同站点的角色列表会有所不同,但是对于用户模型来说,这太重要了,不能在这里没有?)
现在,我们进入其他仍然非常有用的有趣领域:

  • createdAt(创建帐户时)
  • ipAddress(创建帐户时跟踪ip)
  • refererUrl(它来自哪个站点)
  • lastLoggedIn(用户上次登录的时间)
  • isOnline(用户当前是否联机)
还有更多仍然非常有用的字段:

  • 用户名(可能不是每个站点都使用)
  • 连续登录数(类似于堆栈网络)
我认为任何其他信息,如社会数据(喜欢、投票、个人资料视图)、徽章/成就、他们上次更新个人资料/帐户/任何东西的时间,以及其他信息,如他们的姓名,都属于每个站点的个人资料模型


你觉得怎么样?

我想你需要的东西已经解决了。其他一切都取决于您的用例,我们不知道


我的一个建议是关于Salt和Password——您应该使用类似BCrypt的东西,它将为您创建一个Salt散列作为单个字段。

与其说是字段本身,不如说是为了便于移植而抽象代码。我的意思是,大多数动态网站可能会有某种形式的用户身份验证功能,但几乎每个网站都需要存储不同的信息。我们的目标是把每个网站都需要的东西放到用户身上。好吧,我不知道你在寻找什么样的答案,但正如我所说的,我想你已经找到了答案。您将其标记为MongoDB—MongoDB是无模式的,并且非常灵活。你可以随心所欲地存储东西——我会更多地考虑我的查询模式,以了解我计划如何获取数据。是的,我用mongodb标记了它,但我也使用node/express/mongoose(mongoose是mongodb的db驱动程序),为了利用它的一些魔力,你需要定义模式。我用光了所有的标签来包含所包含的每一项技术,但我希望讨论的是数据库模式,而不是您正在使用的数据库类型,因为“扩展”模型的方式将高度依赖于您正在使用的数据库,但在本例中也不相关。