gpt4 book ai didi

mysql - 对于接受来自多个站点(例如 facebook connect、google、flickr 等)登录的站点,模式的良好做法是什么?

转载 作者:可可西里 更新时间:2023-11-01 06:49:16 24 4
gpt4 key购买 nike

我问了this questionhttp://dba.stackexchange.com , 但它以一个注释结束,我应该在这里问它,因为它涉及设计而不是管理。

我正在构建一个网站(“The Site”),我正在考虑如何为其设计数据库架构。

我有几个会影响结果的场景:

  • 用户可以选择在站点上注册一个本地帐户,这样他以后就可以使用该帐户登录他在站点上的帐户。
  • 用户可以选择通过其他站点(“外部站点”)(例如 facebook connect、google、foursquare 等)登录,这将使他使用该站点登录他将来在网站上的帐户。
  • 他选择哪种登录方法( native 帐户或外部站点帐户)并不重要,用户将能够通过外部站点(例如 facebook、twitter)在站点上验证他的帐户、instagram 等...),用于在网站.

我应该如何设计数据库的架构?

对于前两个场景,我想到了一个名为 Users 的表,它有一个 id 和一个 type 字段。该类型引用不同的表,例如 FacebookUsersGoogleUsers,每个表都有一个 user_id 字段 - 它与 有外部关系Users.id 字段 - 以及其他字段,例如 first_nameprofile_picture 等。

但这种方法不支持第三种情况。所以我想到了以下几点:
有一个名为 Users 的基表和每个 external site 的表我想让用户连接到我的网站(即网站) .
Users 表将包含有关用户的基本信息(例如 first name, last name, username, password, email - all optional),其中有一列名为 accounts 将保存诸如 native|facebook|twitter 之类的值,或这些值的序列化数组。
外部站点的表(例如FlickrUsers)将保存与用户相关的外部站点的相关数据,以及对Users 表的 user_id 字段。

当用户将他的帐户连接到外部网站(例如 flickr、instagram)时,我会填充该外部网站 表(例如 FlickrUsers) 与该外部站点的相关数据,并将此外部站点的名称作为另一个值添加到 accounts 字段中用户表。

对于使用多帐户登录的网站,我将此作为一般最佳实践问题提出。

话虽如此,我不确定上述方法/设计是否适合我在上面描述的网站。我很清楚正确答案不止一个,但我知道还有更好的解决方案和不太理想的解决方案。我希望找到更好的解决方案。

为了便于讨论,我的 RDBMS 是 mysql,我的语言是 php。

最佳答案

最简单的方法是创建一个包含不同登录方式的表,该表不特定于登录方式。如果他们想添加另一种方式,这只会为您带来更多工作。

表用户
id、姓名等 - 不是密码

表登录验证
id, user_id, type, validation_data

当他们尝试登录时,将登录类型与验证数据相匹配。对于您的站点 (type=YourSite),validation_data 将是一个密码(或散列密码)。对于 type=Facebook,validation_data 将是您使用 Facebook 登录等验证您的网站。

当有人想要登录时,您根据适当类型的 validation_data 验证他们的 ID。

关于mysql - 对于接受来自多个站点(例如 facebook connect、google、flickr 等)登录的站点,模式的良好做法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6002569/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com