facebook api没有回复电子邮件

时间:2015-10-18 01:42:47

标签: facebook facebook-graph-api facebook-javascript-sdk

我正在尝试使用facebook api返回用户的电子邮件地址。几天前它工作正常,但今天停止工作,并且不知道为什么。

首先我得到访问令牌:

FB.login(response => {
    if (response.authResponse) {
      resolve(response.authResponse.accessToken);
    } else {
      reject({
        error: 'User cancelled login or did not fully authorize.'
      });
    }
  }, {
    scope: 'public_profile,email'
  });

然后我尝试获取用户数据

FB.api('/me', {fields: 'first_name,last_name,email'}, function(response) {
  console.log(response);
});

但我只获取first_name和last_name的数据。没有电子邮件。

此外,当我要求权限时,它会给我发送电子邮件,但正如我所说,电子邮件不会被退回。

FB.api('/me/permissions', function(response) {
  console.log(response);
});

有谁知道会出现什么问题?

BTW:我使用的是API v2.4。

8 个答案:

答案 0 :(得分:16)

#include <stdint.h>
#include <stdio.h>

typedef union {
    double   d;
    uint64_t i;
} double_bits;

int main() {
    double_bits b;
    b.d = 2.5;
    if (b.i != UINT64_C(0x4004000000000000)) {
        fprintf(stderr, "Not an IEEE-754 double\n");
        return 1;
    }
    return 0;
}

尝试将退货字段添加到您的请求中。

答案 1 :(得分:2)

我知道这是一个古老的问题,但是如果有人仍在搜索答案,那么下面的解决方法对我有效。

您需要在范围scope="public_profile,email"中添加电子邮件。

<fb:login-button  scope="public_profile,email" autologoutlink="false" onlogin="OnRequestPermission();"></fb:login-button>

答案 2 :(得分:2)

如果您正确设置了所有代码,但仍然没有收到来自 API 的电子邮件。用户可能没有绑定到该帐户的电子邮件或未经用户确认的电子邮件。

答案 3 :(得分:1)

可能的原因是用户未验证电子邮件。尝试使用经过验证的电子邮件的其他用户,以确保这不是问题。

另见this answer

答案 4 :(得分:0)

我花了很多时间试图弄清为什么在FacebookLoginASPnetWebForms Asp.Net应用程序(https://github.com/nickpinheiro/FacebookLoginASPnetWebForms)上未返回电子邮件。

由于N Nem在上面的帖子(谢谢!),我使它能够正常工作。

打开Default.aspx.cs

在HyperLink1.NaviagteUrl中,添加查询字符串参数:&scope = public_profile,电子邮件

HyperLink1.NavigateUrl = "https://www.facebook.com/v2.4/dialog/oauth/?client_id=" + ConfigurationManager.AppSettings["FacebookAppId"] + "&redirect_uri=http://" + Request.ServerVariables["SERVER_NAME"] + ":" + Request.ServerVariables["SERVER_PORT"] + "/account/user.aspx&response_type=code&state=1&scope=public_profile,email";

我还必须修复一些错误才能正确解析访问令牌。

这次,电子邮件地址可用了!我希望这会有所帮助吗?

答案 5 :(得分:0)

N Nem对我来说是固定的。代码正确,但是缺少登录按钮上的范围。我使用的代码如下。

const _result = (params.province && !params.streetNr);
this.localityIdCP = _result && !params.streetType && params.localityId;
this.streetIdCP = _result && params.streetType && params.localityId;

答案 6 :(得分:0)

这是一篇过时的文章,但我正在分享对我有用的解决方案。

FB Login SDK版本: v6.0

首先,请确保用户(您是出于测试目的)具有有效/已验证的电子邮件。请参阅下面的代码。

FB.login(response => {
    // your code
}, {
    scope: 'public_profile,email',
    return_scopes: true,
    auth_type: 'rerequest'
});

获取用户详细信息

const response = await axios({
      method: 'get',
      url: 'https://graph.facebook.com/v6.0/me?fields=id,name,email&access_token=ACCESS_TOKEN&pretty=0&sdk=joey&suppress_http_code=1'

});

我添加了参数fields = id,name,email

答案 7 :(得分:-1)

我使用承诺并将{scope:'email'}添加到初始请求,然后在fb.api字段中包含'email'。

fb.login({scope:'email'}).then(function (resp) {
    if (resp.status === 'connected') {
       fb.api('/me', 'get', {fields:'id,email,first_name,gender,...'}).then(function (FbUserData) {
          console.log(FbUserData);
       });
    }
});