1

我正在构建一个可以匿名使用的服务,但是用户可以在他的 Facebook 和/或 Twitter 个人资料上分享内容。在授权应用程序后,我希望存储有关用户的基本信息并将其链接到他们正在共享的内容。

通常服务需要在使用前进行身份验证,这解决了这个问题,但是在我的情况下,身份验证出现在最后阶段,它分为 4 个路径:

  1. [脸书+推特]
  2. [仅脸书]
  3. [仅推特]
  4. [没有]

但是,执行上述操作会在数据库中创建冗余数据,即我将 Facebook 信息和 Twitter 信息放在单独的表中,它们之间没有链接,也与帖子没有关系。

  • 防止这种情况的最佳方法是什么?解决方案是在数据建模级别上吗?还是在代码级别?或两者?

  • 以前有这样做过吗?

我已经创建了一个如何合并帐户数据的流程图,但是这个过程可能会在数据库级别上产生开销,因为它需要使用非常长的 FacebookID \ TwitterID 搜索条目。

  • 如果需要额外信息,请在评论中说明。

谢谢

4

1 回答 1

0

我处理这个问题的方法是将用户身份的概念与您的应用程序使用的身份验证概念分开。例如,在数据模型级别,让 Users 表存储基本用户信息,并让 Authentications 表存储与特定身份验证提供程序关联的用户凭据/令牌。在代码级别,如果您打算坚持使用第三方身份验证,我建议您考虑构建一个可以保护您的应用程序不必直接与各种 OAuth 提供程序打交道的层。

在 Ruby/Rails 世界中,这是通过管理用户身份的设计(它还允许具有内置的用户名/密码身份验证,但听起来您对此不感兴趣)和提供身份验证的 OmniAuth 的组合实现的多个提供商。

此处提供了包含两者的示例应用程序:Devise + OmniAuth。最后,关于这个主题的 RailsCast 在这里:OmniAuth Part 1

我意识到您可能不在 Ruby/Rails 中工作,但这些材料可能会为您尝试实现的架构提供灵感。

于 2013-04-10T23:07:50.403 回答