跟进——
如果您的用户不记得他们以前注册过,那么祝他们好运;)
正如您所描述的那样,我计划让用户在通过一种或另一种方式登录后可以选择链接其他帐户。
但就交叉检查而言,你能做的只有这么多。许多社交网络 API 确实提供了电子邮件地址(一旦您通过 OAuth 闯入),但只有当用户选择公开他/她的地址时,才能访问这些地址,这并不能保证。
同样不能保证用户为每个社交网络帐户使用相同的电子邮件地址,因此即使您设法检索到一个地址,它也可能对您有用或没有任何用处。
最后,如果您通过这种方式找到匹配的电子邮件地址,建议提示用户链接帐户,而不是假设他/她希望自动完成此操作。有些人喜欢保持多重人格。即“看起来你也注册了 twitter - 你想链接你的帐户吗?它会让你的生活看起来值得过。”
您可能会考虑提供奖励以链接用户帐户或提供电子邮件地址(当然,这取决于您根据您网站的功能确定这些可能是什么)。
我正在研究的数据库方面的解决方案是维护多个帐户,然后如果通过各种方式发现链接信息,则在查找表中指示所述链接。另一种方法是,一旦您找到一个链接,尝试将多个帐户的所有相关条目合并到一个帐户实体中 - 关于后一种方法,我只能说我会谨慎行事,因为可能存在相当高的复杂性,具体取决于关于用户的活动级别和数据库模式的复杂性。
在我的(心理/实际)命名空间中,以老式方式注册的用户拥有一个“标准”帐户,而使用社交网络的用户拥有一个“别名”帐户。然后目标变成定义别名应该指向的位置,即创建查找,以便通过任一方式的后续登录检索两个帐户的相关信息(优先显示“标准”帐户的个人数据)。
顺便说一句,自从我上一篇文章以来,我想出了如何使 twitter OAuth 正常运行 - 如果您有兴趣,可以查看我的其他答案以获取详细信息。
JB
嗨,马特,
我现在正在解决同样的问题。
假设用户从常规站点帐户开始(如果他看到所有漂亮的“与 XXX 网络连接”按钮,这不一定
是安全的假设!!!),您可以使用 OAuth 或 javascript API(facebookConnect 或 @anywhere - Haven '还没有完全弄清楚后者,我不确定我是否推荐它,因为我认为它没有提供像后端库那样丰富的 API)来登录其他站点。
从社交网络成功登录/重定向后,API 应返回某些信息 - 例如用户 ID 和访问令牌,然后您可以将其以某种身份存储在数据库中,将您的“实际”应用程序用户与社交网络的 ID 相关联网络。
当用户返回该站点时,您可以
1 验证社交网络服务设置的 cookie(各种方案通常验证签名,基于您的应用程序数据的 sha1 或 md5 哈希 - 我的意思是您在使用 twitter/facebook 注册应用程序时获得的数据,通常是消费者密钥、应用程序 ID 等 - 使用接收到的 cookie),以便您知道用户已使用社交网络登录
2 如上所述找到您的数据库条目关联
3基于 facebook/twitter 连接是安全的假设 手动登录您的用户。
警告:这仅与您的实现一样安全(或与 facebook/twitter 的实现一样安全,如果您愿意的话......)
尽管 twitter 的 OAuth 目前似乎不能正常工作,但他们对该过程的一般描述非常有用:
http ://dev.twitter.com/pages/auth
祝你好运。
Ĵ