Php Facebook登录api返回用户电子邮件地址
我正在尝试在我的网站上实现facebook登录。我可以得到所有相关的数据,我需要除了电子邮件地址。数据将使用mysql存储 我遇到了一个有趣的博客,它创建了一个逐步从facebook创建登录的方法。所有这些都很有效,但我不能返回用户的电子邮件地址,这样就可以将其与他们的姓名、年龄、个人资料和图片一起存储在数据库中 这是我的fb_访问文件:注意,我并不是自己写的,如果有类似的东西,它会被告知Php Facebook登录api返回用户电子邮件地址,php,facebook,email,facebook-graph-api,facebook-app-requests,Php,Facebook,Email,Facebook Graph Api,Facebook App Requests,我正在尝试在我的网站上实现facebook登录。我可以得到所有相关的数据,我需要除了电子邮件地址。数据将使用mysql存储 我遇到了一个有趣的博客,它创建了一个逐步从facebook创建登录的方法。所有这些都很有效,但我不能返回用户的电子邮件地址,这样就可以将其与他们的姓名、年龄、个人资料和图片一起存储在数据库中 这是我的fb_访问文件:注意,我并不是自己写的,如果有类似的东西,它会被告知 <?php $app_id = "XXXXX"; $app_secret = "XXXXX"
<?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);
}
}
}
?>
这将返回名称,还有DOB,它可以工作,但是
echo $user_info['email'];
//or
echo $user_profile['email'];
似乎不起作用,它会在浏览器中返回“注意:未定义索引:电子邮件”。
我明白这意味着什么,但我遇到了一个检索电子邮件的例子,我认为它必须工作,因为它没有说明任何地方它没有。我知道这篇文章是2年前创建的,但我不明白为什么现在它不起作用,或者电子邮件地址不能从facebook传递是一件新鲜事。您没有在scope数组中插入
电子邮件
权限
$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'
请参阅和您尚未在范围数组中插入
电子邮件
权限
$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'
请参见和我已将电子邮件添加到范围中,但仍得到一个未识别的索引error@PaulLedger你试过。。。退出应用程序并重新登录。是否已删除应用程序,然后再次将其添加到您的帐户?它不会追溯添加权限,因为这将是一个主要的隐私问题!此外,您还应该使用graph api/权限端点来检查用户是否添加了权限,因为他们可以在选择时撤销扩展权限,所以您不应该总是依赖它,因为我在facebook上单击了“跳过”按钮。在我点击ok后,它得到了电子邮件地址。有没有一种方法可以避免这种情况,或者我应该只显示一个电子邮件字段,以防用户单击跳过。是的,你可以将电子邮件放在作用域的末尾,那么即使用户单击跳过而不是OK,它也是可访问的。我将电子邮件添加到作用域中,但我仍然得到一个未识别的索引error@PaulLedger你试过。。。退出应用程序并重新登录。是否已删除应用程序,然后再次将其添加到您的帐户?它不会追溯添加权限,因为这将是一个主要的隐私问题!此外,您还应该使用graph api/权限端点来检查用户是否添加了权限,因为他们可以在选择时撤销扩展权限,所以您不应该总是依赖它,因为我在facebook上单击了“跳过”按钮。在我点击ok后,它得到了电子邮件地址。有没有一种方法可以避免这种情况,或者我应该在用户单击跳过时显示一个电子邮件字段。是的,您可以将电子邮件放在范围的末尾,即使用户单击跳过而不是确定,也可以访问它