2012-01-18 2 views
0

Так как я действительно не понимаю $ user = $ facebook-> getUser(); (он возвращает NULL, даже если пользователь вошел в систему ...) Я пытаюсь использовать этот код. Проблема в том, что он дает «Активный токен доступа должен использоваться для запроса информации о текущем пользователе». OAuthException, и если я добавлю код переадресации на вход в раздел Catch, он попадет в бесконечный цикл перенаправления ... Может ли кто-нибудь мне помочь?Facebook PHP SDK: api ('/ me') странное поведение

Спасибо! :)

try { 
    $user_profile = $facebook->api('/me'); 
    $scope = 'publish_stream,user_photos'; 

    $scope_params = explode(',',$scope); 

    $permissions = $facebook->api("/me/permissions"); 

if(array_key_exists('publish_stream', $permissions['data'][0]) && array_key_exists('user_photos', $permissions['data'][0])) { 
    // facebook logic 
}else { 
    ?> 
    <!doctype html> 
     <html xmlns:fb="http://www.facebook.com/2008/fbml"> 
     <head> 
     <title>Redirect</title> 
     <meta http-equiv="Content-type" content="text/html; charset=utf-8" /> 

     <script language=javascript>window.open('<?php echo $loginUrl ?>', '_parent', '')</script> 
     </head> 
     <body> 
     Redirecting... 
     </body> 
    </html> 

     <?php 
    exit; 
     } 

}catch (FacebookApiException $e) { 
    echo '<pre>'.htmlspecialchars(print_r($e, true)).'</pre>'; 
} 
+0

Я помню, что у меня была проблема с facebook, которая также пыталась аутентифицировать пользователя каждый раз, когда я хотел перенаправить (включая перенаправление после аутентификации пользователя). Вот заголовок, который нам нужно было добавить, чтобы исправить нашу проблему: 'header ('P3P: CP =" CAO PSA OUR "');' – Nightwolf

+0

, где мне нужно точно добавить этот код? (если я прав, это исправление заголовка для цикла переадресации IE, теперь я нахожусь в FireFox) – VORiAND

+0

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

ответ

0

решение было положить весь код в одном файле index.php

0

Вам необходимо передать токен доступа к API-интерфейсу Graph. Каждый токен доступа имеет время истечения срока действия, и после его прохождения вам необходимо повторно аутентифицировать себя. Вы должны проверить наличие токена доступа в PHP SDK на facebook ($facebook->getAccessToken();). Если его нет - попробуйте повторно аутентифицировать себя. Если id не помогает, попробуйте использовать другое, новое приложение facebook. Целая аутентификация описана здесь: http://developers.facebook.com/docs/authentication/

Приобретение доступа вручную, без использования токена PHP SDK, хорошо описано в приведенной выше ссылке.

+0

Если я переведу перенаправляющий JS-скрипт в секцию catch, он все равно попадает в бесконечный цикл ... но я думаю, что это будет проверять приложение и запрашивать разрешения :( – VORiAND

+0

hm ... я думаю, нет, вы можете связать некоторый онлайн-исходный код, где я могу проверить эту функцию в действии? – VORiAND

+0

Извините, я случайно удалил предыдущий комментарий. В вашем коде: try {echo $ facebook-> getAccessToken(); exit(); } и посмотреть результат. –

0

Петля происходит так:

  1. вызовов API
  2. API говорит маркер истекли/недействительно
  3. GetLoginUrl() -> redirect
  4. После перенаправления на страницу oauth он считает, что разрешения и токен все еще действительны; поэтому он перенаправляет обратно в приложение
  5. Loop происходит (возврат к шагу 1)

Кажется есть задержка между временем истекает маркер или пользователь deauthorises приложения и когда сценарий OAuth фактически подбирая изменение.

Ошибка Может быть?

Смежные вопросы