Facebook 如何设计用户帐户和用户';应用程序的社交帐户数据库

Facebook 如何设计用户帐户和用户';应用程序的社交帐户数据库,facebook,mongodb,web-services,google-account,Facebook,Mongodb,Web Services,Google Account,我有一个应用程序,用户可以通过提供电子邮件、用户名和密码注册 这将存储在mongoDB集合Users\u表中。现在,该应用程序还允许用户使用其社交媒体帐户进行登录,如果用户拥有这样的facebook、google帐户和twitter 问题是我如何着手设计数据库 我最初的想法是有两个独立的集合。如果他或她在应用程序中注册,则第一个集合具有用户信息 User_Table ( Id, firstname, lastname, email, phone_number) 第二个集合存储社交媒体帐户,如f

我有一个应用程序,用户可以通过提供
电子邮件、用户名和密码注册

这将存储在mongoDB集合
Users\u表中
。现在,该应用程序还允许用户使用其
社交媒体帐户
进行登录,如果用户拥有这样的
facebook、google帐户和twitter

问题是我如何着手设计数据库

我最初的想法是有两个独立的集合。如果他或她在应用程序中注册,则第一个集合具有用户信息

User_Table (
Id,
firstname,
lastname,
email,
phone_number)
第二个集合存储社交媒体帐户,如facebook、google或twitter(如果用户有)

我将从用户的社交媒体帐户中检索用户的名字、姓氏、电子邮件和电话号码,并将其存储在收藏中。这将存储在第二个集合中


现在,如果已登录facebook的用户决定注册该应用程序,我如何合并这两个帐户,即如果是同一用户,我如何链接它们?

嗯,使用mongo背后的商业决策是什么

我为什么这么问?当有人决定切换到mongo时,使用它提供的优势将是完美的

因此,我的建议是将这些细节嵌入到一个集合中:

user:{
       /* base fields */
       _id, firstName, lastName, nickName, userName, email.... etc
      socialAccount:[
                 {
                    type:"facebook/twiter/whtsEver"
                    name, /*and all  other stuff you need here*/
                     }]
}

然后,应用程序需要的是给mongo打一个电话,一次获取所有数据。不需要连接

请注意,该电话号码无法通过API(用于Facebook)获得,并且只有当用户在Facebook上有一个电子邮件地址时,您才能获得该地址(对于许多使用手机注册的人来说,情况并非如此)您应该通过FB用户的应用程序范围用户id来识别他们。@CBroe是的,谢谢,我知道。@CBroe谢谢您的回复。Scenairo here:如果用户决定只使用facebook凭据登录,我可以获得基本信息,如名字、姓氏和电子邮件。但是将其链接到用户集合不会有问题吗?因为“用户集合”是指用户在应用程序中注册时使用的集合,其中包括将要使用的密码字段required@CBroe或者不需要密码字段。我考虑拥有2个集合的原因是,如果用户决定使用社交帐户登录,它应该在一个集合中,如果他决定注册应用程序,它应该在另一个集合中。我正在考虑将用户objectId嵌入到社交帐户集合中。这种方法显然是比较电子邮件,因为我假设用户使用社交帐户的电子邮件与注册应用程序的电子邮件相同。但如果电子邮件不同,则我无法链接,否则我的假设将是错误的。@CBroe我的方法是错误的吗?谢谢您的回复。Scenairo here:如果用户决定只使用facebook凭据登录,我可以获得基本信息,如名字、姓氏和电子邮件。但是将其链接到用户集合不会有问题吗?因为用户收集是为了用户在应用程序中注册时使用,其中包括需要的密码字段。如果不需要密码字段。我考虑拥有2个集合的原因是,如果用户决定使用社交帐户登录,它应该在一个集合中,如果他决定注册应用程序,它应该在另一个集合中。我正在考虑将用户objectId嵌入到社交帐户集合中。这种方法显然是比较电子邮件,因为我假设用户使用社交帐户的电子邮件与注册应用程序的电子邮件相同。但如果电子邮件不同,则我无法链接,或者我的假设是错误的。@user3497437当用户通过facebook注册时,我们将获得facebook身份验证信息,当决定使用用户名/密码时,我们可以将相关数据添加到文档中-在这种情况下,我们可以添加字段登录/注册类型,以确定数据库模型中不需要密码-所有逻辑应转移到应用程序,在这个级别上,您将知道如何为特定用户提供访问权限,因此基本上您所说的是将社交帐户嵌入到用户集合中,如上面提供的示例所示。还有,社交帐户数组中定义了什么名称