Проблема с PHP SDK 3 и токеном доступа - PullRequest
0 голосов
/ 11 октября 2011

Я разработал набор страниц, чтобы получить разрешение и аутентифицировать пользователя с новым PHP SDK, но даже если я прочитал много постов, предложений и решений, я не могу понять, как решить мою проблему.

Обычно у меня есть два или более сценария php. Первый, index.php, это тот, в котором запрашивается авторизация и где я получаю URL-адрес для входа в систему с помощью SDK.

На других страницах обычно содержится файл, в котором я инициализирую Facebook SDK и использую некоторые методы (например, facebook-> api ("/ me"))

Все отлично работает при 90% использования, но иногда я получаю сообщения об ошибках типа «Активный токен доступа должен использоваться» (обычно, когда я выхожу из Facebook, а затем я пытаюсь получить доступ к приложению с другим пользователем на тот же браузер, однако эта ситуация не всегда воспроизводима, даже если я попытался изменить свой пароль пользователя - я знаю, что изменение пароля - один из способов аннулировать токен).

Я покажу вам свой код в следующих строках.

Буду признателен за любую помощь, большое спасибо.

config.php

 define('FB_APP_ID', 'my app id');
 define('FB_SECRET', 'my secret');
 define('FB_SCOPE', 'my scope');
 define('FB_REDIRECT_URI','http://<my_base_url>/index.php');
 define('FB_APP_URL','http://apps.facebook.com/<my_app_name>');
 define('FB_REDIRECT_PAGE','page.php');

index.php

<?php
  include('config.php');
  require 'libs/facebook.php';
  $facebook = new Facebook(array(
           'appId'  => FB_APP_ID,
           'secret' => FB_SECRET,
   ));

  header('P3P:CP="IDC DSP COR ADM DEVi TAIi PSA PSD IVAi IVDi CONi HIS OUR IND CNT"');
  $user = $facebook->getUser();
  $scope = FB_SCOPE;
  if ($user) {
     $logoutUrl = $facebook->getLogoutUrl();
  } else {
     $loginUrl = $facebook->getLoginUrl(array('scope' => $scope, 'redirect_uri' => FB_REDIRECT_URI));
  }
  if(isset($loginUrl)) {  ?>
  <html xmlns:fb="http://www.facebook.com/2008/fbml">
    <head>
       <title>php-sdk</title> 
   <script type='text/javascript'>
         function doRedirect() {
       top.location.href = '<?= $loginUrl; ?>';
         }  
         window.setTimeout("doRedirect()", 1000);
       </script>
    </head>
    <body>
      Wait Please ...
    </body>
   </html>  
   <?
    die();
   } else { 
   ?> 
   <html xmlns:fb="http://www.facebook.com/2008/fbml">
    <head>
       <title>php-sdk</title>
   <script type='text/javascript'>
     function doRedirect() {
    if (window.top === window.self) {
        top.location.href = '<?=FB_APP_URL?>';
    }
        else {
            location.href = '<?=FB_REDIRECT_PAGE?>';
    }
     }
     window.setTimeout("doRedirect()", 1000);   
      </script>
    </head>
    <body>
      Wait Please ...
    </body>
   </html> 
 <?
 die();
 }
 ?>

page.php

include('config.php');
require 'libs/facebook.php';
$facebook = new Facebook(array(
    'appId'  => FB_APP_ID,
    'secret' => FB_SECRET,
));
header('P3P:CP="IDC DSP COR ADM DEVi TAIi PSA PSD IVAi IVDi CONi HIS OUR IND CNT"');
$user = $facebook->getUser();
try {
  $me  =  $facebook->api('/me');
 } catch (Exception $e) {
   //header("Location: index.php");
   //die();
 }

этот "page.php" - тот, в котором я обычно получаю исключение Oauth. Я даже могу поймать исключение Oauth, но если я попытаюсь перенаправить на index.php (в котором я думаю, что написанный мной код может переиздать токен доступа), бесконечный цикл начинается в index.page (и page.php никогда не будет достигнута).

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

Заранее спасибо

Emanuele

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