当前数据库中的每个用户名和密码都将对应于未来数据库中每个服务提供商的用户 ID。例如:
user_id | group_id | username | password | twitter_user_id | facebook_user_id | google_user_id
1001 | 3003 | fred | abc123 | aaaaaaaa | bbbbbbbb | ccccccc
通过这样的结构,您可以继续使用现有的登录机制,并允许用户将他们的 facebook/twitter/etc 帐户链接到他们当前的登录名。我假设您的数据库中已经设置了某种形式的用户 ID 和组 ID,但如果没有,那么我认为这将是最简单的方法。
有很多不同的方法可以将现有帐户链接到用户的各种服务提供商帐户 - 您可以选择一种适合您现有结构并为您的用户提供最无缝体验的方法。您网站的一种可能的 oauth 流程,用户可以将新的服务提供商链接到他们的帐户,这可能是:
- 用户导航到您网站上的登录屏幕
- 用户使用其原始用户名和密码登录
- 用户选择服务提供商(例如 twitter)链接到他们的帐户
- 用户被重定向到推特
- 用户在 twitter oauth 屏幕上输入他们的 twitter 密码并同意允许您的网站访问您所说的任何您需要的信息
- 然后 twitter 将用户重定向回您的 oauth 回调页面
- 您获取返回的 twitter id(以及 twitter 返回的任何其他信息)并将其放在您的数据库中针对该用户
- 用户现在可以在未来仅使用 Twitter 登录
一旦用户启用了一个服务提供商,他们就可以通过两种方式访问同一个帐户。
除了上述过程,我建议添加一个审计跟踪,以便用户可以看到他们的帐户已采取的行动。这可能取决于您可用的时间,但它可能会为您提供许多痛苦的客户支持时间。您可以告诉用户的信息越多,赋予他们管理这些信息的权力越大,您自己进行的调查就越少,为他们解决用户问题所花费的时间就越少。