Facebook PHP SDK: api ('/ me') странное поведение

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

Спасибо! 🙂

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>'; } 

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

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

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

Цикл происходит следующим образом:

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

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

Может быть?