Теперь, как мне пройти аутентификацию в PHP SDK 3.0.0 Facebook? - PullRequest
1 голос
/ 27 мая 2011

Итак, Facebook изменил процесс аутентификации.Снова.Пример в PHP SDK:

$user = $facebook->getUser();

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

Однако, как теперь мы аутентифицируем пользователей, которые еще не аутентифицировались?Мы просто создаем оператор else и вызов результата $facebook->getLoginUrl()?

Кроме того, приведенный выше пример дает мне ошибку, так как вызов $facebook->getUser() возвращает мой идентификатор пользователя, но затем мойприложение падает при попытке вызвать $facebook->api('/me'), выдавая ошибку:

Неустранимая ошибка: Uncaught OAuthException: активный токен доступа должен использоваться для запроса информации о текущем пользователе.добавлено / home / woohoobi / public_html / facebookv2 / inc / facebook.php on line 560

Любая помощь о том, как аутентифицировать неаутентифицированногопользователь был бы отличным.

Ответы [ 3 ]

5 голосов
/ 27 мая 2011

Когда вы делаете

$user = $facebook->getUser();

наличие $user не ноль не означает, что у вас есть действительный токен доступа для выполнения некоторых вызовов API. Это просто означает, что пользователь вошел в систему.

Чтобы проверить, есть ли у вас активный токен доступа, можно попытаться сделать вызов API, как код, который вы написали в своем вопросе:

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

$user = $facebook->getUser();

if ($user) {
  // The user is logged in
  try {
    $user_profile = $facebook->api('/me');
    // Here : API call succeeded, you have a valid access token
  } catch (FacebookApiException $e) {
    // Here : API call failed, you don't have a valid access token
    // you have to send him to $facebook->getLoginUrl()
    $user = null;
  }
} // else : the user is not logged in

Итак, у вас есть 2 случая, когда вам нужно отправить пользователя на $facebook->getLoginUrl(), и в обоих случаях мы сделали $user == null. Так что нам просто нужно добавить:

<?php if ($user): ?>
    <a href="<?php echo $facebook->getLogoutUrl() ?>">Logout of Facebook</a>
<?php else: ?>
    <a href="<?php echo $facebook->getLoginUrl() ?>">Login with Facebook</a>
<?php endif ?>

Для полной информации вы можете увидеть пример Facebook PHP SDK , который хорошо документирован.

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

2 голосов
/ 28 мая 2012

Это помогло мне .. очень! Итак, пользователь просто должен сначала принять ваше приложение, чтобы использовать userdata.

<body>
<?php

  if (!$user_id)
    echo("<script> top.location.href='" . $facebook->getLoginUrl() . "'</script>");

?>
1 голос
/ 22 октября 2011

У меня была та же проблема с вызовом getUser (), возвращающим 0. В один день это работало, в следующий раз - нет. Я не осознавал, что PHP SDK предназначен для использования вместе с JS SDK. Вы должны следовать этим инструкциям: https://developers.facebook.com/docs/reference/javascript/ - включите конфигурацию после, и вы должны быть отсортированы.

...