Как войти в систему с OFFLINE_ACCESS, используя новый Facebook PHP SDK 3.0.0? - PullRequest
9 голосов
/ 25 мая 2011

со старым (2.x) SDK Я использовал это для регистрации кого-либо с offline_access:

$session = array
(
    'uid' => $userdata['fb_uid'],
    'sig' => $userdata['fb_sig'],
    'access_token' => $userdata['fb_access_token']
);

$facebook->setSession($session);

В новом SDK эта функция больше не существует.Я думаю, что мне нужно войти, используя:

setPersistentData ($ key, $ value)

, но эта функция защищена, и я не знаю, что такое "код"?Нужно ли это для входа в систему пользователя или нет?А что происходит с 'sig'?Мне это больше не нужно?

Надеюсь, кто-то уже понял это, потому что документация действительно не помогает!

Ответы [ 3 ]

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

С Facebook PHP SDK v3 ( см. На github ) это довольно просто. Чтобы войти в систему с разрешением offline_access, вы спрашиваете его при создании URL-адреса для входа. Вот как ты это делаешь.

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

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

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) {
    // The access token we have is not valid
    $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 ?>

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

$facebook->getAccessToken()

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

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

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

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

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

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

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

0 голосов
/ 21 февраля 2012

Ответ Квентина довольно симпатичный, но, думаю, неполный. Это работает хорошо, но я, например, getUser() не работает в это время, потому что userId (который getUser() возвращает) кэшируется.

Я создал новый метод для очистки всех кэшей и постоянного его сохранения.

public function setPersistentAccessToken($access_token) {
  $this->setAccessToken($access_token);
  $this->user = $this->getUserFromAccessToken();
  $this->setPersistentData('user_id', $this->user);
  $this->setPersistentData('access_token', $access_token);
  return $this;
}
0 голосов
/ 26 мая 2011

С PHP SDK 2.0 (наверное) я просто использую его как

$data = $facebook->api( '/me', 'GET', array( 'access_token' => $userdata['fb_access_token'] ) );

Это должно работать с более новым подходом, так как это кажется более чистым подходом, чем создание сессий самостоятельно. Вы можете попробовать?

...