在Facebook上,有没有可能检查电子邮件是否已确认?

74

更新

这个问题于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的Web应用程序,该应用程序提供用户使用Google或Facebook登录。我希望拥有两种类型帐户的用户在我的系统中显示为同一用户,而不管他们使用哪个身份登录。为了实现这一点,我考虑使用电子邮件地址作为标识符,以确定是否应创建新帐户或用户已存在。

为了避免引入任何安全问题,我必须知道电子邮件地址是否已验证并确实属于用户。对于Google而言,userinfo API 可以告诉我电子邮件是否已验证,因此这里没有问题。但是,在Facebook Graph API中,我找不到类似的内容。
有没有可能知道在Facebook上的电子邮件地址是否已确认?
我知道有一个“verified”字段,但那只能告诉我账户是否已验证,而不能确定电子邮件地址是否已确认。
起初看起来,您只能使用Graph API来访问已确认电子邮件地址的帐户。如果地址未经确认,我会收到错误提示,要求我先确认电子邮件地址,然后才能登录到任何第三方网站。
然而,这似乎并不适用于所有账户。在某些情况下,即使您没有确认的电子邮件地址,也有可能访问Facebook的所有部分。其中一个例子是当您使用@myopera.com邮箱注册时。
当您使用@myopera.com电子邮件地址注册Facebook时,提交注册表格后会收到一条消息,提示您的帐户已被暂时锁定。为了继续操作,您需要提供电话号码以验证您的帐户,并“使Facebook保持安全和免受垃圾邮件侵扰”(抱歉屏幕截图中是瑞典语,这是在我能进入Facebook并更改语言为英语之前)。

Security check during sign up

当您提供电话号码时,您已经登录,Facebook不会再提示您验证电子邮件地址。

唯一能看到您的电子邮件地址尚未得到验证的地方是设置页面:

Facebook settings view with unconfirmed email address

通常在验证电子邮件地址之前无法访问的移动设置现已可用,并列出了注册时输入的电话号码。

Facebook mobile settings view with unconfirmed email address

除此之外,还可以使用未确认的电子邮件地址登录第三方网站:

Logging in to graph API explorer with an unconfirmed email address

当我使用此用户连接到图形API时,我可以获取未确认的电子邮件地址,并且verified字段返回true,因为我已经通过添加电话号码验证了该帐户。因此,我显然不能相信从Facebook获得的电子邮件地址真正属于拥有Facebook帐户的用户。
是否有其他方法可以知道电子邮件地址是否已验证,或者如果我想将其用于识别用户,是否必须自行验证?

1
如果只是针对myopera.com,即使Facebook Graph说它们已经“验证”:“true”,我们也可以将它们视为未经验证。问题是是否有其他豁免情况,例如myopera.com?此外,这让人想知道为什么Facebook会对它们进行不同的处理? - guya
我处于类似的位置,想要“合并”各种帐户。@nibarius,你有找到解决方案吗?看起来Graph API中唯一相关的字段是“verified”属性,但这似乎不是这里需要的,因为它实际上意味着其他东西。 - Ion
@guya,当然可以将所有myopera.com地址视为未验证。但正如你所说,无法知道其他地址是否也是如此。 - nibarius
1
我已经向https://www.facebook.com/whitehat/report/报告了这个安全漏洞。如果您需要再次测试,请使用https://www.facebook.com/whitehat/accounts/上的测试帐户。 - coolaj86
12
我刚刚亲自测试了一下:我首先尝试更改现有Facebook帐户的电子邮件地址,但在未验证新地址之前无法将其选择为我的主要电子邮件。我还尝试使用未经验证的电子邮件地址创建新的Facebook帐户,在电子邮件得到验证之前,我根本无法使用“通过Facebook登录”。因此,是的,Facebook电子邮件地址现在可以被视为已验证的电子邮件地址。 - BenMorel
显示剩余5条评论
2个回答

10

1
我们是否看的是同一页?它明确表示您可以依赖电子邮件地址已通过验证。成功使用Facebook登录后,您将拥有用户的电子邮件地址、Facebook ID和访问令牌。您的应用程序应该搜索已使用相同电子邮件地址创建的现有帐户。如果存在一个,则应合并两个帐户并将Facebook信息添加到现有帐户中-如上所推荐。 - Rok Kralj
2
请检查将手动登录信息添加到已创建的Facebook登录帐户>确保验证了Facebook登录电子邮件地址,然后重新验证您的评论。 - jano
@RokKralj 答案在页面下方:如果您使用电子邮件地址作为唯一凭据来识别每个帐户,则应用程序应验证与人的Facebook帐户关联的电子邮件地址(并在Facebook登录期间获取)是否有效。 您可以通过在应用程序中创建代码向在Facebook登录后获得的地址发送验证电子邮件来实现此目的(您可能需要将此步骤作为常规登录系统的一部分)。 - RiZKiT
@RiZiT 你和Rok Kralj引用了两个使用案例,这两个案例在创建登录方法的顺序上有所不同。有一个地方让人困惑,一个案例提到了验证电子邮件地址,而另一个没有提到。但是,如果用户在未登录状态下添加了手动登录到Facebook登录之后,这并不矛盾。即使Facebook已经验证了,你仍然需要进行验证。如果手动登录先于Facebook登录,就像Rok引用的案例中一样,如果Facebook已经验证了地址,你就不需要再次验证地址。省略了这种情况的说明似乎证实了Facebook已经验证了地址。 - undefined

1

根据那份文档,看起来很有前途。然而,在进行了一些测试之后,似乎它实际上无法使用。正如在以下stackoverflow问题中提到的那样,似乎在user.email_hashes返回任何内容之前,您必须先注册要获取哈希值的电子邮件:http://stackoverflow.com/questions/7620314/email-hashes-and-deprecated-connect-registerusers - nibarius

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接