Web Services 如何为应用程序设计用户帐户和用户的社交帐户数据库

watbbzwu  于 2022-11-15  发布在  其他
关注(0)|答案(2)|浏览(113)

我有一个应用程序,用户可以通过提供email, username and password来注册。
这将被存储在mongoDB集合Users_Table中。现在,如果用户有一个这样的facebook, google account and twitter,应用程序也允许用户使用他们的social media account进行签名。
问题是我如何着手设计数据库?
我最初的想法是有两个独立的集合。第一个集合有用户信息,如果他或她注册了应用程序。

User_Table (
Id,
firstname,
lastname,
email,
phone_number)

第二个集合存储社交媒体帐户,如Facebook、Google或Twitter(如果用户有)。
我将从用户的社交媒体帐户中检索用户的名字、姓氏、电子邮件和电话号码,并将其存储在集合中。
现在,如果一个用户谁已登录Facebook决定注册的应用程序,我如何合并两个帐户,即如果是同一个用户,我如何链接他们?

uz75evzq

uz75evzq1#

嗯,使用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,并且一次获得***所有***数据。不需要***连接***。

ou6hu8tu

ou6hu8tu2#

好吧,这是一个老问题,但我会留下一个提示,以防其他人也有同样的疑问。很久以前,我也曾遇到过同样的问题,this article帮了我很大的忙。但让我们总结一下:首先,需要一个表来存储所有用户信息(姓名、电子邮件、电话...),则需要另一个表来存储与第三方登录/注册集成相关的所有信息(provider_id,user_id,bla bla...)。然后你需要想办法将通过电子邮件+密码创建的账户与其他提供商创建的账户合并,为此,我们通常会考虑比较电子邮件、电话或姓名等字段,但这不是一个选项(因为很明显,人们可以为他们的社交媒体使用不同的电子邮件,他们可以像苹果允许的那样隐藏他们的电子邮件,名称不一样,等等。有成千上万的方式如何这可能会出错),所以基本上这不是一个你不这样做的选择。所以更好的方法(不幸的是,这不是一个实际的解决方案)要做到这一点,需要用户链接他们的帐户(例如,在用户的个人资料中使用用户名+密码登录),您只需要求用户登录其社交媒体帐户,然后您只需“连接”您的数据库中的两个表,因为现在您“几乎”可以确定是正确的用户(这是一些视频游戏所做的,然后向用户给予等。)请注意,此“连接”意味着您需要检查该第三方帐户是否以前注册到您的系统,然后您链接它,如果它'如果是第一次,那么你也可以链接它,然后用户可以在下次登录时使用它来访问他在你系统中的帐户,也有一种自动的方法来做到这一点,你真的做了之前的比较(我之前提到过,您不应该这样做,比较一些字段,发现一些“可能的相同帐户或重复的潜在匹配”),但随后您会询问用户是否"这确实是他/她的帐户,并要求他/她登录到第三方提供商与他/她的凭据(相同的方法,但现在你建议匹配),然后你做同样的“连接”过程。嗯,或多或少这是一种方法,但它可能会更好地解释在文章中Peter Nijssen(伴侣,无论你在哪里,谢谢🙏!)
好吧,我希望这能帮助到一些人!最好的问候!

相关问题