我正在尝试使用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。
答案 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)
可能的原因是用户未验证电子邮件。尝试使用经过验证的电子邮件的其他用户,以确保这不是问题。
答案 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);
});
}
});