为 Open Auth(社交登录)创建数据库模式的最佳实践

Best practice to create a database schema for Open Auth (Social logins)

我已经为用户管理及其角色和权限创建了一个数据库架构。问题实际上开始了,当我决定整合多个 "Open Auths" 例如 Facebook 登录,Google 登录等...

我的数据库 table DB.USERS 目前看起来是这样的:

id
oauth_id
username
email
password
remember_token
...firstname,lastname,etc...

目前,问题是,每当用户尝试通过其中一个 OAuth(Google、Facebook)登录并且已经有一封电子邮件(由 oauth 之一或应用程序的授权库) ,它会触发错误,无法继续。

我想知道为这种方法创建数据库模式的最佳方法是什么?有人已经有过它的经验吗?

我正在使用 Laravel 4.2

不同的社交登录源报告相同的电子邮件地址是完全正常的情况。首先你需要回答一个问题——在这种情况下你想做什么?

如果您信任社交登录报告有效的电子邮件地址,您只需将新的登录源合并到现有帐户即可。

您也可以选择为每个单独的登录源创建单独的帐户 - 在这种情况下,您应该将电子邮件视为类似名称 - 而不需要它是唯一的。如果你想允许自己的电子邮件+密码登录,这是有问题的。

需要考虑的其他问题:

  • 如果现有帐户的社交登录报告的电子邮件地址发生更改,会发生什么情况?如果新电子邮件与另一个现有帐户匹配怎么办?
  • 是否允许用户主动更改电子邮件?

先设计流程,再使用合适的数据库模式。