Facebook PHP SDK - оставаться в системе - PullRequest
1 голос
/ 09 сентября 2010

В настоящее время я использую PHP Facebook SDK для своего проекта (http://github.com/facebook/php-sdk/).. Я настроил его так, чтобы пользователю приходилось нажимать ссылку для посещения Facebook, которая затем проверяет пользователя на использованиеприложения, а затем вернуть сведения о сеансе на мой сайт, что нормально. Однако я хочу сохранить эти сведения о сеансе в базе данных, чтобы пользователь, вошедший в систему, мог получить доступ к информации из своей учетной записи в любое время. В настоящее время, еслипользователь выходит из Facebook, а затем пытается извлечь информацию с моего сайта, я получаю следующее исключение: «OAuthInvalidTokenException: ошибка при обработке маркера доступа.» Если пользователь вошел в Facebook на том же компьютере, то проблема не возникает.

Есть ли что-то, что я должен установить, или есть какой-то другой способ, которым я должен выполнить это подключение, чтобы иметь возможность извлекать данные, когда пользователь не вошел в систему?

код, который я использую для получения / установки сеанса Facebook:

require 'libraries/facebook/facebook.php';

// Create our Application instance (replace this with your appId and secret).
$facebook = new Facebook(array(
  'appId'  => 'xxxx',
  'secret' => 'xxxx',
));

$session = $facebook->getSession();

$me = null;
// Session based API call.
if ($session) {
    //Save to database

  } catch (FacebookApiException $e) {
        error_log($e);
  }
} else {
    $loginUrl = $facebook->getLoginUrl();
    header('Location: ' . $loginUrl);
}

Как только сеанс сохранен в базе данныхиз этой части я отображаю данные, публикуя сериализованный сеанс базы данных в этом:

$session = unserialize($_POST['session']);
    require_once('libraries/facebook/facebook.php');

    $facebook = new Facebook(array(
      'appId'  => 'xxxx',
      'secret' => 'xxxx',
    ));

    $facebook->setSession($session, false);

    try {
        $uid = $facebook->getUser();
        // Do stuff
    } catch (FacebookApiException $e) {
        echo "<tr><td>" . $e . "</td>";
    }

Что-то явно не так с тем, что я здесь делаю?Или я не могу использовать этот метод для создания oAuth-соединения, которое позволяет запрашивать данные для пользователей, когда они не вошли в систему?

Спасибо,

Dan

Ответы [ 4 ]

2 голосов
/ 09 сентября 2010

По умолчанию токены доступа (OAuth Token), которые вы получаете с платформы Facebook, имеют продолжительность только сеанса.Итак, то, что вы описываете, ожидается.

Если вы хотите продолжить взаимодействие с API даже после выхода пользователей из системы, вам необходимо запросить у них offline_access расширенное разрешение , что сделает ваши маркеры доступа «долгоживущими», которые вы можете сохранить в базе данных для последующего использования.

Просто имейте в виду, что если пользователь изменит разрешения, предоставленные вашему приложению, ваш токен доступа станетнедействительным (или, по крайней мере, неконгруэнтным).Но вы можете идти в ногу с изменениями разрешений через Обновления в реальном времени .

Примечание: Этот не не позволяет пользователю "войти",просто дает вам право действовать от их имени, когда они не вошли в систему.

1 голос
/ 09 сентября 2010

Я изменил тип приложения на «родное приложение» вместо «HTML5 / Mobile Web», которое затем предоставляет опцию «оставаться в системе в xxx», которую можно выбрать, что, по-видимому, не предложенный последним. Протестировал его, и теперь он работает, и это хорошая новость!

0 голосов
/ 05 сентября 2011

Если вам нужно взять пользовательские данные из API, вы можете получить свое приложение access_token и получить пользовательские данные своего приложения, подписав свои запросы приложением access_token. Посмотрите раздел входа в приложение http://developers.facebook.com/docs/authentication/

0 голосов
/ 05 сентября 2011

Просто запросите API следующим способом, чтобы получить URL для выхода ...

$logoutUrl=$facebook->getLogoutUrl();

Используйте $ logoutUrl, чтобы выйти из системы! Вот и все!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...