PHP PHP SDK - OAuthException - OAuth2 - PullRequest
       17

PHP PHP SDK - OAuthException - OAuth2

0 голосов
/ 23 декабря 2011

Как вы должны иметь дело с людьми, которые недавно вошли в Facebook.Зайдите на ваш сайт, если им будет ссылка «продолжить» (поскольку вы обнаружите, что они уже вошли в Facebook), а затем на странице, на которую вы направите их, вы получите эту ошибку.

Fatal error: Uncaught OAuthException: An active access token must be used to query information about the current user. thrown in /var/www/html/lib/base_facebook.php on line 1039

Я не понимаю, как вы должны это предотвратить?Это как-то связано с подписанной информацией, которую вы возвращаете в Facebook для получения access_token?Похоже, у этой подписанной информации может истечь срок действия (она имеет дату выхода).Как правильно справиться с этим в потоке вашего веб-сайта?

Предполагается ли, что вы напишите такой код:

<?php 
$user = $facebook->getUser();
try {
  // attempt to do a call just to see if you are going to have this issue
  $profile = $facebook->api('/me'); 
} catch (Exception $e) {
  $user = false;
}
if ($user) { ?>
  <a href="start.php">Begin</a>
<?php } else { ?>
    <fb:login-button scope="email" size="large">Connect</fb:login-button>
<?php } ?>

Вместо этого:

<?php 
$user = $facebook->getUser();
if ($user) { ?>
  <a href="start.php">Begin</a>
<?php } else { ?>
    <fb:login-button scope="email" size="large">Connect</fb:login-button>
<?php } ?>

Возвращение $ user из SDK Facebook, похоже, говорит только о том, что есть cookie.И не, если это действительно сработает, когда вы будете выполнять вызовы API.

ОБНОВЛЕНИЕ : Так что моя единственная проблема с этим методом - когда у пользователя есть cookie на моемсайт, но вызов API не удается - я показываю им кнопку подключения.Пользователь нажимает кнопку подключения, она быстро появляется и исчезает.Поскольку это был не настоящий «auth.login», который только что произошел, пользователь не будет отправлен на мою страницу start.php через редирект JavaScript.Как другие справляются с этим?Я в тупике.Скажите, пожалуйста, есть ли другие недостатки в том, как я пытаюсь это сделать.

Ответы [ 2 ]

1 голос
/ 27 декабря 2011

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

$user = $facebook->getUser();

if($user) {
    $access_token = $facebook->getAccessToken();
    $params = array('access_token' => $access_token);
    try {
        $me = $facebook->api("/me", $params);
    } catch(FacebookApiException $e) {
        $user = null;
    }
}

if($me) {
    // proceed with authenticated user with an active access token.
}
0 голосов
/ 27 декабря 2011

Предполагается ли, что вы напишите такой код:

Да, вам придется обрабатывать OAuthException.

Но вместо того, чтобы использовать кнопку входа FBML,Вы можете перенаправить пользователя на страницу входа в Facebook для вашего приложения.Вы можете получить URL с помощью функции getLoginUrl, предоставленной Facebook PHP SDK.См. getLoginUrl для получения дополнительной информации.

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

$params = array( 'scope' => 'email' );

После успешного входа пользователь будет перенаправлен обратно наСтраница приложения, которая перенаправила его на страницу входа в Facebook.

...