Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/236.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 具有社交登录唯一性的电子邮件地址_Php_Google Api_Facebook Php Sdk - Fatal编程技术网

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

Php 具有社交登录唯一性的电子邮件地址,php,google-api,facebook-php-sdk,Php,Google Api,Facebook Php Sdk,所以在过去的几天里,我一直在为我的网站实现Facebook和Google OAuth 2社交登录 一切都很好,基本上: 当用户登录其电子邮件地址时,会将其与数据库中已有的地址进行比较 如果电子邮件存在,则社交登录将附加到已存在的电子邮件,用户登录到其已存在的帐户 否则将创建一个新帐户。(就像我注意到它在这里起作用一样) 但棘手的部分来了。谷歌可能有两个电子邮件域名: gmail.com 谷歌邮箱 如果Facebook账户是在googlemail.com上创建的,那么谷歌账户(使用gmai

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

一切都很好,基本上:

  • 当用户登录其电子邮件地址时,会将其与数据库中已有的地址进行比较
  • 如果电子邮件存在,则社交登录将附加到已存在的电子邮件,用户登录到其已存在的帐户
  • 否则将创建一个新帐户。(就像我注意到它在这里起作用一样)
但棘手的部分来了。谷歌可能有两个电子邮件域名:

  • gmail.com
  • 谷歌邮箱
如果Facebook账户是在
googlemail.com
上创建的,那么谷歌账户(使用
gmail
)将不会链接。现在我通过检查数据库中的
gmail.com
googlemail.com
解决了谷歌与Facebook之间的关系,但如果反过来,问题就来了,而Facebook就是找不到地址的人

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

我想到的一些事情是:

  • 未来与其他API的兼容性等
  • 复杂性
  • 保安?(我通过使用Facebook API中的
    verified
    标志稍微解决了这个问题)
  • 其他电子邮件提供商可能会遇到与指向同一帐户的双电子邮件域相同的问题(也许我必须编写一个巨大的无法处理列表?)
所以问题是:在我的Facebook登录功能中添加DB子句以通过
gmail.com
googlemail.com
查找是否是一个坏主意

我应该假设
gmail.com
googlemail.com
是两个独立的账户吗


感谢您的想法,

您可以尝试将所有“googlemail.com”字符串转换为“gmail.com”。这个概念是,如果系统发现谷歌邮箱,就把它转换成gmail

例如: 用户输入test@googlemail.com

算法将是:

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

我决定在用户登录Facebook或Google时,通过搜索与电子邮件地址相关的
googlemail.com
gmail.com
域来解决这个问题


这似乎工作得很好,比正常化和潜在地更改用户信息更好,以满足此问题。

Hmm是的,仅正常化到一个域,我也想到了这一点,我可能会尝试一下,谢谢