登录后使用facebook的sdk获取用户的Facebook信息

问题描述:

我使用Facebook的JavaScript的SDK和PHP SDK登录用户到我的网络应用程序。使用JavaScript我有登录/外出工作,我可以得到登录用户的公开Facebook的详细信息。登录后使用facebook的sdk获取用户的Facebook信息

但是,当使用PHP,我没有得到用户的Facebook的细节。 为了给你一些有关应用程序的信息,当我导航到包含表单的某个页面时,代码将检查它们是否已登录。如果不是,则会给它们一个LoginUrl链接。一旦登录,我有$ user_id,所以现在用户可以使用表单,但我没有得到他们的Facebook的详细信息,以保存在MySQL数据库时提交表单。有人有建议,我应该做什么?我肯定有$ user_id,因为只有我拥有$ user_id才会显示表单。

我基于https://developers.facebook.com/docs/reference/php/facebook-api/

<?php 
require 'facebook.php'; 
//create application instance 
$config = array(
'appId' => '**************', 
'secret' => '****************************', 
'cookie' => true); 
$facebook = new Facebook($config); 
$user_id = $facebook->getUser(); 
?> 

//Page containing form 
<div data-role="page" id="postAJourney" data-add-back-btn="true" data-back-btn-text="back" data-rel="back" data-direction="reverse" data-transition="flip" data-theme="b" > 
    <div data-role="header" data-position="fixed"> 
     <h1>Post A Journey</h1> 
    </div> 

    <div data-role="content"> 
     <?php if ($user_id): ?> 
     <form action="add_journey.php" method="post" id="postAJourneyForm"> 
     <?php 
     try 
     { 
      $access_token = $facebook->getAccessToken(); 
     $param_token = array('access_token' => $access_token); 
     //Proceed knowing you have a logged in user who's authenticated. 
     $user_profile = $facebook->api('/me','GET',$param_token); 
     echo "Name: " . $user_profile['name']; 
     // store session data 
     $_SESSION['fb_id'] = $user_profile['id']; 
     $_SESSION['fb_name'] = $user_profile['name']; 
     $_SESSION['fb_first_name'] = $user_profile['first_name']; 
     $_SESSION['fb_last_name'] = $user_profile['last_name']; 
     $_SESSION['fbImg'] = "https://graph.facebook.com/".$user_profile['id']."/picture"; 
    $_SESSION['fbLink'] = "https://www.facebook.com/".$user_profile['name']; 
     } 
     catch(FacebookApiException $e) 
     { 
     // If the user is logged out, you can have a 
     // user ID even though the access token is invalid. 
     // In this case, we'll get an exception, so we'll 
     // just ask the user to login again here. 
     $login_url = $facebook->getLoginUrl(); 
     error_log($e->getType()); 
     error_log($e->getMessage()); 
     } 
     ?> 

     //jQuery Mobile Form would be here 

<?php else: ?> 
<?php // No user, print a link for the user to login 
$login_url = $facebook->getLoginUrl(array(
'scope' => 'email', 
'redirect_uri' => "http://localhost/share/#postAJourney" 
)); 
?> 
<div> 
    Login using OAuth 2.0 handled by the PHP SDK: 
    <a href="<?php echo $login_url; ?>">Login with Facebook</a> 
</div> 
<?php endif ?> 
+0

难道你不能通过Id调用API来获取用户详细信息吗? – EaterOfCode

+0

请参阅:http://developers.facebook.com/docs/reference/rest/users.getInfo/ – EaterOfCode

+0

首先,我使用getUser()检查用户是否已登录,然后使用$ user_profile = $ facebook-> api(' /我');我应该得到用户的详细信息。 REST已被弃用 –

我的代码/ *在你需要的用户访问令牌,然后通过在Facebook上该令牌/我作为API参数,那么你可以得到登录信息的Facebook用户。你需要在范围内传递你想要的用户权限范围。为了获取用户访问令牌,你可以这样使用*/

$ loginUrl = $ facebook-> getLoginUrl(array('scope'=>' manage_pages','redirect_uri'=>'you url'));

/*取得OAuth的网址,并通过在该范围内,以允许用户在Facebook页面宣誓许可获取来自Facebook的访问令牌重定向它会给你的请求*/

$ =的access_token $ facebook- > getAccessToken();

$ param_token = array('access_token'=> $ access_token);

$ user_profile = $ facebook-> api('/ me'); //替换为该行

$ user_profile = $ facebook-> api('/ me','GET',$ param_token);

+0

感谢您的帮助。我更新了我的代码,但没有更改。 –