具有社交登录唯一性的电子邮件地址

时间:2012-07-25 19:14:41

标签: php google-api facebook-php-sdk

所以在过去的几天里,我一直在为我的网站实施Facebook和Google OAuth 2社交登录。

一切都很好,基本上是:

  • 当用户登录他们的电子邮件地址时,将与已经在DB上的内容进行比较
  • 如果电子邮件存在,社交登录将附加到已存在的电子邮件,并且用户登录到其现有帐户
  • 否则会生成一个新帐户。 (就像我注意到它在这里有效)

但是这里有棘手的部分。 Google可以使用两个域名发送电子邮件:

  • gmail.com
  • googlemail.com

如果Facebook帐户是googlemail.com,那么Google帐户(使用gmail)将无法链接。现在我通过检查gmail.comgooglemail.com的数据库来解决谷歌与Facebook的关系,但问题是如果它被撤销而Facebook就是找不到地址的人。

我以为我可以将gmail.comgooglemail.com检查添加到facebook登录功能以检查unqiue电子邮件地址,但我想知道这是否会导致我无法预见的问题。

我想到的一些事情是:

  • 未来与其他API等的兼容性
  • 复杂性
  • 安全? (我通过使用Facebook API中的verified标志来解决这个问题)
  • 其他电子邮件提供商可能对指向同一帐户的双重电子邮件域存在同样的问题(也许我必须编写一个巨大的不可更新的列表?)。

所以问题是:添加一个DB子句来查找gmail.comgooglemail.com我的Facebook登录功能是个坏主意吗?

我应该假设gmail.comgooglemail.com是两个独立的帐户吗?

感谢您的想法,

2 个答案:

答案 0 :(得分:1)

您可以尝试将所有“googlemail.com”字符串转换为“gmail.com”。这个概念是系统找到googlemail,将其转换为gmail。

实施例: 用户输入test@googlemail.com

算法将是:

email = "test@googlemail.com"
replace("@googlemail.com","@gmail.com",email )
authenticate(email);

答案 1 :(得分:0)

我决定通过在用户使用Facebook或Google登录时搜索与电子邮件地址相关的googlemail.comgmail.com域来实际解决此问题。

这看起来效果很好,并且优于规范化并可能更改用户信息以解决此问题。