更新资料
这是在2013年12月16日通过https://www.facebook.com/whitehat/report/向Facebook报告的,而Facebook在12月17日回应说该错误早已得到修复。
我已经使用我的Facebook帐户重新测试了这一点(我仍然没有验证电子邮件地址),并且在使用Grap API Explorer工具时,无法使用Graph API或FQL查询获取该帐户的电子邮件地址。
结论:使用Graph API或FQL查询从Facebook获得的电子邮件地址是经过验证的电子邮件。如果帐户尚未验证,则为电子邮件,但无法获取。
原始帖子
我正在使用SSO制作一个网络应用程序,该应用程序为用户提供了使用Google或Facebook登录的功能。我希望同时使用这两种帐户的用户在我的系统中显示为同一用户,而不管他们使用哪个身份登录。为此,我正在考虑使用电子邮件地址作为标识符,以了解是否应该创建一个新帐户或用户是否已经存在。
为了不引入任何安全问题,我必须知道该电子邮件地址已经过验证,并且实际上属于该用户。对于Google,userinfo API可以告诉我电子邮件是否已验证,因此这里没有问题。但是我在Facebook Graph API中找不到类似的东西。
是否可以知道是否在Facebook上确认了电子邮件地址?
我知道有一个verified
字段,但这仅告诉您该帐户是否已验证,而不是电子邮件地址。
首先,您似乎只能将Graph API用于已确认电子邮件地址的帐户。如果未确认地址,我会收到一个错误消息,告诉我必须先确认电子邮件地址,然后才能登录任何第三方站点。
但是,似乎并非所有帐户都是如此。在某些情况下,即使您没有确认的电子邮件地址,也可以访问Facebook的所有部分。例如,当您使用@ myopera.com邮件地址进行注册时。
当您使用@ myopera.com电子邮件地址注册Facebook时,您会收到一条消息,提示您在提交注册表单后帐户已被临时锁定。要继续,您需要提供电话号码以验证您的帐户并“保持Facebook安全和免受垃圾邮件侵扰”(对于截图中的瑞典语,很抱歉,这是在我进入Facebook并将语言更改为英语之前):
提供电话号码后,您就可以登录,而Facebook不会再让您担心必须验证电子邮件地址。
您可以在设置页面上看到唯一尚未验证您的电子邮件地址的地方:
在确认电子邮件地址可用并列出注册期间输入的电话号码之前,通常无法访问“移动设置”:
除此之外,还可以使用未经确认的电子邮件地址登录第三方站点:
当我与此用户连接到图api时,我可以获得未确认的电子邮件地址,并且该verified
字段按预期返回true,因为我已经通过添加电话号码验证了该帐户。因此,显然我无法相信我从Facebook获得的电子邮件地址确实属于拥有Facebook帐户的用户。
还有其他方法可以知道电子邮件地址是否已通过验证,或者如果我想使用它来识别用户,是否必须自己进行验证?