我正在使用注册Facebook作为登录我的网络应用程序的方式之一,并明确要求“电子邮件”权限..
登录时,一些用户数据($facebook->api('/me')
)存储在用户数据库中,但有时电子邮件字段不存在 - 这是一个常见问题吗?
答案 0 :(得分:31)
只是一个猜测......
facebook文档说:
注意:如果用户没有有效的电子邮件地址,则不会返回此字段
来源:https://developers.facebook.com/docs/reference/api/user/
因此,当电子邮件地址无效时(例如,多年未使用过facebook并且已经销毁/更改了电子邮件地址的用户),Facebook可能会停止返回此字段。
5%的无效地址可能听起来很大,但如果我查看我的Facebook好友,我认为超过5%的人从不使用他们的帐户,如果他们登录时使用的地址是我不会感到惊讶现在无效。
答案 1 :(得分:4)
用户并不总是需要提供电子邮件地址才能使用Facebook。他们也可以通过短信注册,但它不常见。
简而言之,FB并不总是有电子邮件地址,因此无法将其提供给您的应用。
答案 2 :(得分:2)
<强>尝试:强>
// Just to make sure email are permitted
//$facebook->getLoginUrl(array('req_perms' => 'email'))
// Request email
FB.api('/me?scope=email', function(response) { /*...*/ });
或者:
$email = $facebook->api('user_id?fields=email');
<强>问题:强>
<强> ALTERNATIVE:强>
如果您绝对需要联系该用户,但无法获得其电子邮件地址,您仍然可以获得其Facebook电子邮件(每个人都有此电子邮件):“user_name@facebook.com”。
如果用户使用POP服务器,他将直接在GMail或其他人收到电子邮件,否则他将收到您的电子邮件作为私人消息。唯一的缺点是,这种方法是您的电子邮件必须是“普通/文本”而不是“HTML”。
答案 3 :(得分:1)
有一件事是Users don't always have to provide an email address in order to use Facebook(could have registered through mobile)
- 如Colm所说。除此之外 -
如果用户确实已授予您email
延期许可权或未随后被撤销,请检查该用户。要对此进行检查,您可以使用权限api -
/USER/permissions
答案 4 :(得分:0)
我有类似的问题&amp;我找到了原因。对于未在“常规帐户”设置选项卡下设置主电子邮件地址(他们有许多电子邮件地址,但他们没有指出哪个是主电子邮件地址)的用户,会出现此问题。
我尝试在各种知名网站上使用此类帐户,这些网站都有Facebook登录&amp;即使他们无法从这些帐户中检索电子邮件地址。
所以,它不是代码的问题(假设你已经要求权限)。我们只需要处理这样的场景&amp;让用户知道我们没有收到他们的电子邮件地址。像Klout一样。
由于
答案 5 :(得分:0)
除了@Jigar Jain上面写的内容之外,用户实际上可以在签名流入期间取消选中电子邮件权限。如果是这样的话,他/她的电子邮件地址将不会被Facebook退回。
如果用户取消选中电子邮件权限,您可以实施一个使登录失败的逻辑,强制您的用户选择另一种保证返回用户电子邮件地址的登录方法。
答案 6 :(得分:0)
使用Facebook注册时,提供电子邮件地址不是强制性的。另一种方法是要求用户在Facebook帐户设置中链接其电子邮件ID。这样,如果这是数据库中的必填字段,则可以获取电子邮件ID。否则,您可以继续使用FB提供的唯一ID。