Могу ли я сохранить токен доступа Facebook и использовать его позже? - PullRequest
10 голосов
/ 05 января 2011

Я создаю веб-приложение (PHP), которое использует FB connect.Я успешно зарегистрировался / вошел в систему с помощью PHP-библиотеки, предоставленной Facebook.Также я могу публиковать сообщения на стене, используя этот код

        Facebook::$CURL_OPTS[CURLOPT_SSL_VERIFYPEER] = false;
    Facebook::$CURL_OPTS[CURLOPT_SSL_VERIFYHOST] = 2;               
    $facebook = new Facebook(array(
      'appId'  => $fb_key,
      'secret' => $fb_secret,
      'cookie' => true, // enable optional cookie support
    ));
    $session = $facebook->getSession();
    if ($session)
    {
        $facebook->api('/me/feed', 'POST', array('message'=>$message, 'link'=>$link['href'], 'name'=>$link['text']));                   
    }

Однако, если я вручную зайду в диспетчер файлов cookie моего браузера и удалю файл cookie, в котором хранится сеанс FB, код не будет работать.Единственное, что у меня есть, это FB ID пользователя, который я храню в БД.Есть ли способ опубликовать на стене пользователя, даже если сеансы FB потеряны?Имеет ли смысл хранить маркер доступа FB пользователя в БД для последующей публикации на стене или токен доступа относительно недолговечен?

Вот пример ситуации, которая может произойти в моем приложении: пользователь нажимает кнопку fb, авторизует мое приложение, перенаправляется обратно на мой сайт, где я автоматически создаю учетную запись на основе данных, предоставленных FB, а также храню FB пользователяID, чтобы я мог войти в этот пользователь позже.Теперь он просматривает сайт, вводит некоторую информацию, и эта информация публикуется на его стене.Пока все в порядке, потому что браузер пользователя хранит куки, созданные FB.Теперь пользователь покидает сайт и связывается с администратором сайта.Администратор открывает свой собственный браузер, переходит в интерфейс администратора и публикует что-то от имени этого пользователя.Теперь, имея идентификатор FB этого пользователя и предполагая, что пользователь не отменил разрешения, могу ли я публиковать это на своей стене?

Ответы [ 2 ]

23 голосов
/ 28 мая 2011

С помощью Facebook PHP SDK v3 ( см. На github ) довольно просто задать и использовать токен автономного доступа пользователя. Вот как ты это делаешь.

Получить токен автономного доступа

Сначала вы проверяете, вошел ли пользователь в систему:

require "facebook.php";
$facebook = new Facebook(array(
  'appId'  => YOUR_APP_ID,
  'secret' => YOUR_APP_SECRET,
));

$user = $facebook->getUser();

if ($user) {
  try {
    $user_profile = $facebook->api('/me');
  } catch (FacebookApiException $e) {
    $user = null;
  }
}

Если это не так, вы генерируете URL "Логин с Facebook", запрашивая разрешение offline_access:

if (!$user) {
    $args['scope'] = 'offline_access';
    $loginUrl = $facebook->getLoginUrl($args);
}

А затем отобразите ссылку в вашем шаблоне:

<?php if (!$user): ?>
    <a href="<?php echo $loginUrl ?>">Login with Facebook</a>
<?php endif ?>

Затем, когда пользователь вошел в систему, вы можете получить токен автономного доступа и сохранить его. Чтобы получить его, позвоните:

if ($user) {
    $token = $facebook->getAccessToken();
    // store token
}

Использовать токен автономного доступа

Чтобы использовать токен автономного доступа, когда пользователь не вошел в систему:

require "facebook.php";
$facebook = new Facebook(array(
  'appId'  => YOUR_APP_ID,
  'secret' => YOUR_APP_SECRET,
));

$facebook->setAccessToken("...");

И теперь вы можете делать вызовы API для этого пользователя:

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

Надеюсь, это поможет!

8 голосов
/ 05 января 2011

ОБНОВЛЕНИЕ : Этот ответ больше не действителен, так как offline_access устарел.

Вам необходимо запросить разрешение offline_access. Проверьте разрешения документ.

РЕДАКТИРОВАТЬ За обновление и комментарии - некоторую информацию об удалении offline_access можно найти здесь .

...