Как получить данные пользователя программно, через Facebook аутентификацию? - PullRequest
0 голосов
/ 03 декабря 2011

Я могу вручную получать данные пользователя, но не программно.

Использование кода на стороне сервера, как есть, от - 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.");
 }

 ?>

Вывод только Привет, имя пользователя не отображается!

Я думаю, что проблема в file_get_contents (), так как эхо-ответ $ response не имеет выходных данных, а $ token_url имеет соответствующее значение.

   $response = @file_get_contents($token_url);
  • Версия PHP = 5.2.9
  • Отчеты об ошибках отключены, но это включено в код - error_reporting (E_ALL); не дает вывода.

ОБНОВЛЕНИЕ - Итак, я попробовал это через 6 месяцев, и это сработало. Единственное, что изменилось с тех пор, это мой хостинг. Я использовал HostBig раньше. Урок - Не полагайтесь на услуги хостинга за 1 доллар в месяц, им нельзя доверять.

Ответы [ 2 ]

0 голосов
/ 23 июня 2012

Итак, я попробовал это через 6 месяцев, и это сработало.Единственное, что изменилось с тех пор, это мой хостинг.Я использовал HostBig раньше.

Возможно, что-то не так с PHP-конфигурацией HostBig, которая отключила file_get_contents ().

UPDATE - я разговаривал с ребятами из HostBig, и они сказали мне, что онипо соображениям безопасности отключил allow_url_fopen и предложил cURL в качестве более безопасной альтернативы.

0 голосов
/ 03 декабря 2011

Вы пытаетесь запустить этот код с локального хоста? Если да, то это не сработает. При регистрации приложения на Facebook вы должны были зайти на сайт приложения. Загрузите скрипт на сервер, отредактируйте ваш app_id, секрет и URL скрипта. Затем попробуйте выполнить его.

Если это не сработает даже тогда, попробуйте повторить ваши $dialog_url и $token_url. Сначала вручную скопируйте и вставьте $dialog_url в браузер и посмотрите, какую ошибку он дает. Если он запрашивает аутентификацию, аутентифицируйте ваше приложение. Это вернет вас на страницу. Затем попробуйте запустить $token_url в браузере. Он даст вам точный ответ, что сервер предоставляет вам.

...