API Facebook ('/ me') не аутентифицируется - PullRequest
0 голосов
/ 21 августа 2011

Недавно я пытался заставить мое приложение работать с PHP SDK 3.0, и у меня возникли некоторые проблемы с ним, когда я вошел в систему. У меня есть файл "example.php" из загрузки 3.1.1, который нене подтверждает, что я вошел в систему. Файл «with_js_sdk.php» также не подтверждает, что я вошел в систему при первом запуске.Однако после его запуска и этот файл, и файл «example.php» увидят, что я вошел в систему. Как только я выйду из системы, «example.php» не будет работать, и «with_js_sdk.php» завершится неудачно с первой попытки.выполнить, но при всех последующих запусках оба файла (и некоторые другие файлы, с которыми я проверяю это) будут все аутентифицироваться правильно.Когда не работает, все файлы выдают «OAuthException» с сообщением: «Активный токен доступа должен использоваться для запроса информации о текущем пользователе».даже когда я вошел в систему. Итак, мой вопрос, есть ли что-то в «with_js_sdk.php», что я могу установить в других моих файлах?Я предполагаю, что это как-то связано с "oauth: true" в этом файле из того, что я прочитал, хотя я не эксперт по кодированию в Facebook, поэтому я не уверен.И у меня есть приложение iframe, поэтому в моем приложении нет части "FB.init" (которая работала случайно до изменения sdk).Вот минимальный код, который я тестирую и который выдает ошибку:

<code><?php

require '../src/facebook.php';

$facebook = new Facebook(array(
  'appId'  => '11111111111111111',
  'secret' => 'abcdefghijk etc...',
  'cookie'=>true
));

// See if there is a user from a cookie
$user = $facebook->getUser();

if ($user) {
  try {
    // Proceed knowing you have a logged in user who's authenticated.
    $user_profile = $facebook->api('/me');
  } catch (FacebookApiException $e) {
    echo '<pre>'.htmlspecialchars(print_r($e, true)).'
';$ user = null;}}?>

getuser всегда возвращается корректно, но вызов $ facebook-> api ('/ me') всегда завершается неудачей, пока я не запустил файл с fbml.И прежде чем спросить, да, я изменил appID и секрет в файлах.Спасибо.

Дэррил

Ответы [ 8 ]

6 голосов
/ 07 декабря 2012

Вместо me pass $user. Например:

$user_profile = $facebook->api('/'.$user);
3 голосов
/ 29 января 2012

У меня была та же проблема, и я страдал дольше всего, и решил ее, просто получив новые файлы PHP SDK из https://github.com/facebook/php-sdk.

Ссылка: http://developers.facebook.com/docs/reference/php/

1 голос
/ 05 января 2013

ЭТО РАБОТАЕТ ДЛЯ МЕНЯ

$ user_profile = $ facebook-> api ('/'.$ user);

А вот мой полный пример сценария php fb connect: `

<code>$fbconfig['appid' ] = " id ";
$fbconfig['secret'] = " secret ";
$fbconfig['appBaseUrl'] =   "https://apps.facebook.com/ example /";

$user            =   null; //facebook user uid
try{
    include_once "facebook.php";
}
catch(Exception $o){
    echo '<pre>';
    print_r($o);
    echo '
';} // Создать наш экземпляр приложения.$ facebook = новый Facebook (массив ('appId' => $ fbconfig ['appid'], 'secret' => $ fbconfig ['secret'], 'cookie' => true,));// Аутентификация Facebook part $ user = $ facebook-> getUser ();// Мы можем иметь или не иметь эти данные на основе // того, вошел ли пользователь в систему. // Если у нас есть $ user id здесь, это означает, что мы знаем, // что пользователь вошел в систему // Facebook, но мы нене знаю, действителен ли токен доступа.// токен доступа недействителен, если пользователь вышел из Facebook.$ loginUrl = $ facebook-> getLoginUrl (массив ('scope' => 'email, publish_stream, user_birthday, user_location, user_work_history, user_about_me, user_hometown'));if ($ user) {try {// Продолжайте, зная, что вы вошли в систему пользователя, который прошел аутентификацию.$ me = $ facebook-> api ('/'.$ user);} catch (FacebookApiException $ e) {// вы должны использовать error_log ($ e);вместо печати информации в браузере d ($ e);// d - функция отладки, определенная в конце этого файла $ user = null;}} if (! $ user) {echo "
1 голос
/ 08 сентября 2011

Вы должны знать о области видимости переменных, $ user_profile будет находиться только внутри области действия оператора if, поэтому, если вы хотите получить доступ из внешней области видимости, он будет недоступен, помните, что вы всегда можете объявить свою переменную снаружи изатем инициализируйте его, чтобы он был доступен через ваш php-файл.

<code>?php

require '../src/facebook.php';

$facebook = new Facebook(array(
  'appId'  => '11111111111111111',
  'secret' => 'abcdefghijk etc...',
  'cookie'=>true
));

// See if there is a user from a cookie
$user = $facebook->getUser();
$user_profile; // variable being declare outer scope
if ($user) {
  try {
    // Proceed knowing you have a logged in user who's authenticated.
    $user_profile = $facebook->api('/me');
  } catch (FacebookApiException $e) {
    echo '<pre>'.htmlspecialchars(print_r($e, true)).'
';$ user = null;}}?>
1 голос
/ 21 августа 2011

Вы пытались print_r($user_profile) посмотреть, что получится? Кроме того, параметр cookie не используется с последним SDK.

0 голосов
/ 07 октября 2014

Это звучит смешно.Но у меня была та же проблема, и я исправил ее с помощью простого цикла.

$i = 0;
while($i < 2)
{
    if($facebookId)
    {
        //CODE
    }

     $i++;
}

И это действительно работает D:

0 голосов
/ 05 января 2013

вам не хватает чего-то. Чтобы иметь активный токен доступа, вы должны представить его в переменной сеанса. И вы даже не создаете сеанс в своем коде. ВЫ ДОЛЖНЫ ИМЕТЬ ПЕРВЫЙ ДОСТУП попробуйте это-> $access_token =$facebook->getAccessToken(); if ($user) { if( session_id() ) {} else {session_start();}

Теперь вы должны сохранить $_SESSION['access_token']=$access_token ; для дальнейшего использования.

0 голосов
/ 22 августа 2011

, если токен недействителен, запустить аутентификацию.

также, чтобы jssdk работал с php sdk v3.x, убедитесь, что вы обновили код js sdk для использования OAuth 2.0.

...