【问题标题】:Do I need to insert one fake row in database?我需要在数据库中插入一个假行吗?
【发布时间】:2011-01-16 12:05:59
【问题描述】:

我有几个像例子这样的表。

Users    Books    UsersBookPurchase
UID      BookId   UserId 
UName    Name     BookId
Password Price
Email

这很好。我有自己的登录系统,但我也使用一些 3rd 方来验证 OpenID 或 facebook Authetication。我的问题是,如果用户能够使用 OpenID 或 facebook 身份验证成功登录,我需要执行哪些步骤,即我是否必须在用户表中插入一个假行,因为如果我不插入,将如何维护完整性。我的意思是当使用 Facebook 身份验证登录的人进行购买时,我应该在 UsersBookPurchase 中插入什么用户 ID,因为 UserId 是用户表中的参考键。请给我一个关于我需要做什么的高级概述,因为这是相当常见的情况。

提前致谢:)

【问题讨论】:

    标签: database openid


    【解决方案1】:

    基本上是的。不要认为这是一个假的行。您应该做的是根据 Facebook API 提供的数据创建一个实际的用户帐户(我对 OpenID 不太熟悉)

    Facebook API 将为您提供名字和姓氏、电子邮件地址,也许还有一些其他数据 Facebook没有登录名的概念,用户通过邮箱登录。

    您所做的只是根据 API 提供的数据创建一个新用户。

    有一些事情需要注意:用户可能已经在您的网站上注册。当您从 Facebook 获取数据时,您应该搜索自己的用户表,以查看电子邮件地址是否已经属于您自己的注册用户,在这种情况下,您可以做一些花哨的事情,例如将该用户标记为也有 Facebook 登录。

    【讨论】:

    • 打败我 - 基本上就是我要说的 :-) +1 提到链接帐户...
    • - 我只使用 Facebook 进行身份验证。但我没有收到电子邮件地址作为回应。我确实得到了名字和姓氏。但就电子邮件地址而言,有 2 个字段,即 email_hashes 和 proxied_email,两者均为空。任何想法可能是什么问题?虽然这偏离了轨道,并且真的应该问一个单独的问题,因为您已经根据我的需要回答了我的问题。
    【解决方案2】:

    如果我要这样做,我会将登录信息抽象到一个单独的表中,并在 User 表中有某种类型。该类型用于标识使用的身份验证方法,即您自己的、Google 等。如果用户确实选择使用替代方法,则您确实需要关联但使用不同的类型。但是,是的,这是一个新记录。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-05
      • 1970-01-01
      相关资源
      最近更新 更多