Php 我的Facebook登录脚本已停止接收用户电子邮件

Php 我的Facebook登录脚本已停止接收用户电子邮件,php,facebook,sdk,facebook-php-sdk,Php,Facebook,Sdk,Facebook Php Sdk,我的旧facebook登录脚本暂时无法正常工作 我可以获得每个用户的详细信息(姓名、位置、照片等),但电子邮件地址除外 大约两个月前,它工作正常;我不知道‘什么改变了?’ index.php <a onclick='facebookLogin();'>login</a> <script> function facebookLogin() { window.open('https://www.facebook.com/dialog/oauth?clien

我的旧facebook登录脚本暂时无法正常工作

我可以获得每个用户的详细信息(姓名、位置、照片等),但电子邮件地址除外

大约两个月前,它工作正常;我不知道‘什么改变了?’

index.php

<a onclick='facebookLogin();'>login</a>
<script>
function facebookLogin()
{
    window.open('https://www.facebook.com/dialog/oauth?client_id=xxxxxxxx&display=popup&redirect_uri=http://www.example.com/facelogin.php&scope=email,user_location,user_birthday','facebook_popup','width=600,height=400');

}
</script>
    if((!empty($_GET['code']))) {
$code = $_GET['code'];
$token_url = "https://graph.facebook.com/oauth/access_token?client_id=xxxxxxxx&redirect_uri=" . urlencode('http://www.example.com/facelogin.php')
           . "&client_secret=XXXXXXXXXXXXXXXXXXXX&code=" . $code;
$ch=curl_init($token_url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
$response=curl_exec($ch);
curl_close($ch);
$params = null;
parse_str($response, $params);

$user_profile = get_user_data($params['access_token']);
用户获取数据功能:

function get_user_data($access_token = null)
{
    $url =  'https://graph.facebook.com/me?access_token='.$access_token;
    // Initialize session and set URL.
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    // Set so curl_exec returns the result instead of outputting it.
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    // Get the response and close the channel.
    $response = curl_exec($ch);
    curl_close($ch);
    return $user = json_decode($response);
}
例如,在这里,我可以得到:$user\u profile->name

但我无法获得$user\u profile->电子邮件。


你知道为什么吗?

你必须明确请求访问用户电子邮件的权限

Facebook只允许您在
$user\u profile
对象中访问有关您有权访问的用户的内容。默认情况下,名称是存在的(你不能为没有名称的用户做很多事情),并且你可以为你的应用程序的用户获得一个唯一的ID,但是你必须在他们首次登录时请求特殊权限才能获得电子邮件


请查看Facebook PHP文档。

我的脚本大约在一个月前询问权限。。一切都很好。。(?)他似乎在js请求中发布了电子邮件范围。在你的代码中,你也能得到他们的生日和位置吗?因为在js请求中,你似乎会在电子邮件中请求这些。是的。。我可以得到出生地、地点、照片等。。只有电子邮件返回为空:Si无法理解@Ciccio:(向我们展示您的
get\u user\u data
函数的功能。我在下面的问题中添加了@cbroe使用
var\u dump($user\u profile)进行调试输出
,然后看看你得到了什么。你能描述一下,我应该在哪里添加这个吗?我应该说ECHO吗?在你将函数返回值赋给那个变量的那一行之后。不,不需要ECHO,var_dump本身生成输出。