簡體   English   中英

如何通過Facebook身份驗證以編程方式獲取用戶數據?

[英]How to get user's data programatically, via facebook authentication?

我能夠手動獲取用戶的數據,但不能以編程方式獲取。

-https://developers.facebook.com/docs/authentication/直接使用服務器端代碼

 <?php 

 $app_id = "MY_APP_ID";
 $app_secret = "MY_APP_SECRET";
 $my_url = "ADDRESS_OF_CURRENT_PAGE";

 session_start();
 $code = $_REQUEST["code"];

 if(empty($code)) {
   $_SESSION['state'] = md5(uniqid(rand(), TRUE)); //CSRF protection
   $dialog_url = "https://www.facebook.com/dialog/oauth?client_id=" 
     . $app_id . "&redirect_uri=" . urlencode($my_url) . "&state="
     . $_SESSION['state'];

   echo("<script> top.location.href='" . $dialog_url . "'</script>");
 }

 if($_REQUEST['state'] == $_SESSION['state']) {
   $token_url = "https://graph.facebook.com/oauth/access_token?"
   . "client_id=" . $app_id . "&redirect_uri=" . urlencode($my_url)
   . "&client_secret=" . $app_secret . "&code=" . $code;

   $response = @file_get_contents($token_url);
   $params = null;
   parse_str($response, $params);

   $graph_url = "https://graph.facebook.com/me?access_token=" 
     . $params['access_token'];

   $user = json_decode(file_get_contents($graph_url));
   echo("Hello " . $user->name);
 }
 else {
   echo("The state does not match. You may be a victim of CSRF.");
 }

 ?>

輸出僅為Hello,用戶名不顯示!

我認為問題在於file_get_contents(),因為回顯$ response沒有輸出,而$ token_url具有適當的值。

   $response = @file_get_contents($token_url);
  • PHP版本= 5.2.9
  • 錯誤報告功能已關閉,但將其包含在代碼中-error_reporting(E_ALL); 沒有輸出。

更新 -所以,我在6個月后嘗試了此方法,並成功了。 此后唯一發生變化的是我的托管。 我以前使用過HostBig。 課程 -不要依賴每月$ 1 /美元的托管服務,它們是不可信任的。

因此,我在6個月后嘗試了此方法,並成功了。 此后唯一發生變化的是我的托管。 我以前使用過HostBig。

HostBig的PHP配置可能出問題了,它禁用了file_get_contents()。

更新-我與HostBig進行了交談,他們告訴我出於安全原因已禁用allow_url_fopen,並建議使用cURL作為更安全的選擇。

您是否要從本地主機運行此代碼? 如果是的話,那就行不通了。 在Facebook上注冊應用程序時,您必須已進入應用程序的網站。 將腳本上傳到服務器上,編輯您的app_id,secret和腳本的URL。 然后嘗試執行它。

如果仍然無法運行,請嘗試回顯$dialog_url$token_url 首先手動復制,將$dialog_url粘貼到瀏覽器中,看看會出現什么錯誤。 如果它要求身份驗證,請對您的應用程序進行身份驗證。 它將帶您回到頁面。 然后嘗試在瀏覽器中運行$token_url 它將為您提供服務器所提供的確切響應。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM