Facebook 无法访问用户';s的电子邮件。获得;“未定义”;
我有一个Facebook登录实现的网站。我的应用程序具有用户电子邮件的权限。 即使用户使用Facebook登录我的应用程序,我也只能检索他/她的姓名或基本信息。不是电子邮件。 下面是我从Facebook开发者网站上复制的代码:Facebook 无法访问用户';s的电子邮件。获得;“未定义”;,facebook,facebook-javascript-sdk,facebook-login,Facebook,Facebook Javascript Sdk,Facebook Login,我有一个Facebook登录实现的网站。我的应用程序具有用户电子邮件的权限。 即使用户使用Facebook登录我的应用程序,我也只能检索他/她的姓名或基本信息。不是电子邮件。 下面是我从Facebook开发者网站上复制的代码: window.fbAsyninit=function(){ FB.init({ appId:'xxxxxxxxxxxxx',//应用程序ID channelUrl:'//domain.org/channel.html',//通道文件 状态:true,//检查登录状态 co
window.fbAsyninit=function(){
FB.init({
appId:'xxxxxxxxxxxxx',//应用程序ID
channelUrl:'//domain.org/channel.html',//通道文件
状态:true,//检查登录状态
cookie:true,//启用cookie以允许服务器访问会话
xfbml:true//解析xfbml
});
FB.Event.subscribe('auth.authResponseChange',函数(响应){
如果(response.status===“已连接”){
testAPI();
}else if(response.status===“未授权”){
FB.login();
}否则{
FB.login();
}
});
};
//异步加载SDK
(职能(d){
var js,id='facebook jssdk',ref=d.getElementsByTagName('script')[0];
if(d.getElementById(id)){return;}
js=d.createElement('script');js.id=id;js.async=true;
js.src=“//connect.facebook.net/en_US/all.js”;
ref.parentNode.insertBefore(js,ref);
}(文件);
函数testAPI(){
log('欢迎!获取您的信息…);
FB.api('/me',函数(响应){
log(“很高兴见到你,+response.email+”);
});
}
您可能没有电子邮件权限,即使您认为自己有
试试看
FB.login(函数(){
FB.api(“我”,
功能(响应){
console.log(response.email);
});
},{'scope':'email'});
该用户可能在Facebook上有一封未经验证的电子邮件。你可以要求他们在Facebook设置上验证他们的电子邮件(Facebook将向他们发送一封带有点击链接的电子邮件),然后重试 你可以检查一下,看看这不是一个bug,实际上,用户没有在facebook上注册电子邮件是可能的,这是正确的,因为有几个原因。例如,您已通过手机创建帐户,或尚未验证其电子邮件
所以这是一个众所周知的问题。如果我们无法从fb处获得电子邮件,最好的解决办法可能是以表格的形式索要电子邮件
我的问题是如何复制空的email字段来测试提供的解决方案
编辑。。这是他们在facebook开发者网站上说的:
…用于“用户”对象的“电子邮件”字段的文档(
)澄清
此处的预期行为是:“此字段不会
如果没有可用的有效电子邮件地址,则返回”
在许多情况下,您可能会认为用户
应该有一个电子邮件地址返回,但他们不会。为了隐私
由于安全原因,无法详细说明确切的
原因任何特定用户的电子邮件地址都不会返回,因此
请不要问。一些可能的原因:
帐户上没有电子邮件地址;帐户上没有确认的电子邮件地址;不
验证帐户上的电子邮件地址;用户输入了一个安全检查点
这要求他们重新确认他们的电子邮件地址,但他们没有
然而这样做了;无法访问用户的电子邮件地址
您还需要“电子邮件”扩展权限,即使对于拥有
文件中的有效、已确认、可访问的电子邮件地址
如果特定电子邮件帐户中的问题仍然存在。 解决方案是:你必须要求人们使用他们的facebook电子邮件id登录 我的问题是,当我连接我的个人帐户时,未定义电子邮件 然后尝试了很多东西 终于用我的facebook电子邮件id登录了。它成功了
已定义用户名的facebook帐户导致登录应用程序时出现问题您现在必须指定要获取的字段,它被称为“声明性字段”:
有关更多信息,请参阅更改日志:电子邮件中存在问题。如果用户电子邮件未经验证,则将显示未定义的电子邮件,如果电子邮件已充分验证,则将显示已登录的电子邮件。请尝试登录并尝试打印姓名,我已通过这种方式解决了我的问题。。 检查雨果提到的这个链接。这真的很有帮助。
window.fbAsyninit=函数(){
FB.init({
appId:'xxxxxxxxxxxx',
状态:正确,
曲奇:是的,
xfbml:对
});
FB.Event.subscribe('auth.authResponseChange',函数(响应){
如果(response.status===“已连接”){
testAPI();
}else if(response.status===“未授权”){
FB.login();
}否则{
FB.login();
}
});
};
(职能(d){
var js,id='facebook jssdk',ref=d.getElementsByTagName('script')[0];
if(d.getElementById(id)){return;}
js=d.createElement('script');js.id=id;js.async=true;
js.src=“//connect.facebook.net/en_US/all.js”;
ref.parentNode.insertBefore(js,ref);
}(文件);
函数testAPI(){
api('/me?字段=名称,电子邮件',函数(响应){
console.log(response.name+'-'+response.email);
});
}
ref:我得到了许可,问题是关于我的帐户。我创建了另一个Facebook帐户,登录可以显示电子邮件。谢谢,伙计,你搞定了!我花了这么多时间试图获取电子邮件,即使是在添加电子邮件范围时。哦,我的话!我已经寻找这个答案好几天了,上帝啊!干得好!找了几个小时!欢迎来到堆栈溢出!请不要只回答源代码。试着提供一个关于你的解决方案如何工作的很好的描述。请参阅:。谢谢
FB.api('/me', {fields: 'name,email'}, function(response) {
console.log('Good to see you, ' + response.email + '.');
});
<html>
<head></head>
<div id="fb-root"></div>
<script>
window.fbAsyncInit = function() {
FB.init({
appId : 'xxxxxxxxxxxxx',
status : true,
cookie : true,
xfbml : true
});
FB.Event.subscribe('auth.authResponseChange', function(response) {
if (response.status === 'connected') {
testAPI();
} else if (response.status === 'not_authorized') {
FB.login();
} else {
FB.login();
}
});
};
(function(d){
var js, id = 'facebook-jssdk', ref = d.getElementsByTagName('script')[0];
if (d.getElementById(id)) {return;}
js = d.createElement('script'); js.id = id; js.async = true;
js.src = "//connect.facebook.net/en_US/all.js";
ref.parentNode.insertBefore(js, ref);
}(document));
function testAPI() {
FB.api('/me?fields=name,email', function(response) {
console.log(response.name + '---'+response.email);
});
}
</script>
<fb:login-button show-faces="true" width="200" max-rows="1" scope="public_profile,email"></fb:login-button>
</body>
</html>