繁体   English   中英

Facebook登录API返回用户的电子邮件地址

[英]Facebook login api return user email address

我正在尝试在我的网站上实现Facebook登录。 除了电子邮件地址,我可以获取所有需要的相关数据。 数据将用于使用mysql存储。

我遇到了一个有趣的博客,该博客创建了从Facebook创建登录名的逐步方法。 所有这些都很好,但是我无法返回用户的电子邮件地址,因此该电子邮件地址无法与用户的姓名,年龄,profile_pic一起存储。

这是我的fb_access文件:注意我自己没有写所有这些内容,如果有类似的记载,将不胜感激。

<?php
$app_id     = "XXXXX";
$app_secret = "XXXXX";
$site_url   = "http://localhost/XXXXXX/";

try{
    include_once "src/facebook.php";
}catch(Exception $e){
    error_log($e);
}
$facebook = new Facebook(array(
    'appId'     => $app_id,
    'secret'    => $app_secret,
    ));

// Get User ID
$user = $facebook->getUser();

if($user){
    try{
        $user_profile = $facebook->api('/me');
    }catch(FacebookApiException $e){
        error_log($e);
        $user = NULL;
    }
}

if($user){
    // Get logout URL  logout add username to destroy cookie
    $logoutUrl = $facebook->getLogoutUrl(array(
   'next'=>'http://localhost/XXXXX/logout.php'));
    }else{
    // Get login URL
    $loginUrl = $facebook->getLoginUrl(array(
        'scope'         => 'read_stream, publish_stream, user_birthday, user_location, user_work_history, user_hometown, user_photos',
        'redirect_uri'  => $site_url."?profile_builder=".md5($user),
        ));
}

if($user){
    $queries = array(
        array('method' => 'GET', 'relative_url' => '/'.$user),
        array('method' => 'GET', 'relative_url' => '/'.$user.'/home?limit=50'),
        array('method' => 'GET', 'relative_url' => '/'.$user.'/friends'),
        array('method' => 'GET', 'relative_url' => '/'.$user.'/photos?limit=6'),
        );
    try{
        $batchResponse = $facebook->api('?batch='.json_encode($queries), 'POST');
    }catch(Exception $o){
        error_log($o);
    }
    $user_info      = json_decode($batchResponse[0]['body'], TRUE);
    $feed           = json_decode($batchResponse[1]['body'], TRUE);
    $friends_list   = json_decode($batchResponse[2]['body'], TRUE);
    $photos         = json_decode($batchResponse[3]['body'], TRUE);
    if(isset($_POST['pub'])){
        try{
            $statusUpdate = $facebook->api("/$user/feed", 'post', array(
                'message'       => 'Check out 25 labs',
                'link'          => 'http://25labs.com',
                'picture'       => 'http://25labs.com/images/25-labs-160-160.jpg',
                'name'          => '25 labs | A Technology Laboratory',
                'caption'       => '25labs.com',
                'description'   => '25 labs is a Technology blog that covers the tech stuffs happening around the globe. 25 labs publishes various tutorials and articles on web designing, Facebook API, Google API etc.',
                ));
        }catch(FacebookApiException $e){
            error_log($e);
        }
    }
    if(isset($_POST['status'])){
        try{
            $statusUpdate = $facebook->api("/$user/feed", 'post', array('message'=> $_POST['status']));
        }catch(FacebookApiException $e){
            error_log($e);
        }
    }
}
?>

我遇到的麻烦是检索电子邮件地址:

echo $user_info['first_name'];
echo $user_info['last_name'];
// these also work
echo $user_profile['first_name'];
    echo $user_profile['last_name'];

这将返回名称,也有DOB,这可以但

echo $user_info['email'];
//or
echo $user_profile['email']; 

似乎不起作用,它在浏览器中返回“通知:未定义的索引:电子邮件”。 我明白这是什么意思,但我整个检索电子邮件的一个例子就是在这里 ,我认为它是有一定的工作,因为它并没有说明任何地方,它没有。 我知道该帖子创建于2年前,但我不明白为什么它现在不起作用,或者是无法从Facebook传递电子邮件地址是新事物。

您尚未在范围数组中插入email权限

$loginUrl = $facebook->getLoginUrl(array(
    'scope'         => 'read_stream, publish_stream, user_birthday, user_location, user_work_history, user_hometown, user_photos',
    'redirect_uri'  => $site_url."?profile_builder=".md5($user),
    ));

范围应阅读

 'scope'         => 'email, read_stream, publish_stream, user_birthday, user_location, user_work_history, user_hometown, user_photos'

参见https://developers.facebook.com/docs/facebook-login/permissions/#addinghttps://developers.facebook.com/docs/reference/php/facebook-getLoginUrl/

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM