Проблемы с аутентификацией с OAuth (приложение Facebook), сеанс недоступен? - PullRequest
0 голосов
/ 17 февраля 2011

Я хочу прочитать все дни рождения друзей у текущего пользователя.Я использую новый API Graph Facebook.Я запрашиваю авторизацию разрешений (read_friendslist и friends_birthday) на основе примеров и php-sdk на Facebook * *1003*.Для чтения списка друзей и сведений о пользователе я использовал API Graph с Facebook PHP SDK.

Следующие фрагменты кода представляют собой краткий самостоятельный пример моего подхода.Если я пытаюсь использовать мое приложение, оно запрашивает логин, затем запрашивает разрешения, а затем не может распечатать всех моих друзей из-за того, что сеанс недоступен.Что здесь не так?

Во-первых, birthday.php, который используется следующим index.php, я удалил некоторый шаблонный код или код, который, по-моему, не вызывает эту проблему (определяется [...]).Вы можете найти полный код в конце этого вопроса.

<?php
function get_birthday_of_friends() {

    $fbconfig['appid' ]  = "MY_APP_ID";
    $fbconfig['secret']  = "MY_APP_SECRET";

    try{
            include_once "facebook/src/facebook.php";
    }
    catch(Exception $o){
             // [...] log error
    }
    // Create our Application instance.
    $facebook = new Facebook(array(
      'appId'  => $fbconfig['appid'],
      'secret' => $fbconfig['secret'],
      'cookie' => true,
    ));

    $session = $facebook->getSession();

    $fbme = null;
    // Session based graph API call.
    if ($session) {
               // [...] return birthdays
    } else {
        echo "No session found";
    }
}
?>

Требуемый lib.php идентичен примеру insights .

<?php

    // [...] Include and define app-id etc.

function get_access_token($base_url) {
  if (isset($_REQUEST['access_token'])) {
    return $_REQUEST['access_token'];
  }
  $params = array();
  $params['client_id'] = APP_ID;
  $params['redirect_uri'] = $base_url;
  if (!isset($_REQUEST['code'])) {
    $params['scope'] = 'read_friendlists, friends_birthday';
    $url = FacebookMethods::getGraphApiUrl('oauth/authorize', $params);
    throw new RedirectionException($url);
  } else {
    $params['client_secret'] = APP_SECRET;
    $params['code'] = $_REQUEST['code'];
    $url = FacebookMethods::getGraphApiUrl('oauth/access_token');
    $response = FacebookMethods::fetchUrl($url, $params);
    $response = strstr($response, 'access_token=');
    $result = substr($response, 13);
    $pos = strpos($result, '&');
    if ($pos !== false) {
      $result = substr($result, 0, $pos);
    }
    return $result;
    }
}

    // [...] Call get_access_token() and get_birthday_of_friends()!
?>

CanВы помогаете мне с этим?Я добавил весь исходный код на pastebin.com, если это поможет вам определить мою проблему.Исходный код на pastebin.com для " index.php " и " birthday.php ".

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

Ответы [ 3 ]

1 голос
/ 18 февраля 2011

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

Взгляните на эту ссылку: http://developers.facebook.com/docs/authentication/signed_request/

На первый взгляд, вы должны:

  • Получить параметр signed_request из $ _REQUEST.
  • Используйте функцию выборки, представленную в ссылка для его декодирования это, у вас будет массив, в котором есть параметр, который называется oauth_token.
  • С этим параметром вы можете начать звонить на График добавив его к URL-адресу, например
    *https://graph.facebook.com/PROFILE_ID/pictures/?access_token=OAUTH_TOKEN*

Убедитесь, что у вас включен Oauth 2.0 for Canvas в настройках конфигурации вашего приложения (вкладка «Дополнительно»).

0 голосов
/ 18 февраля 2011

Если сеанс недоступен, мне пришлось перенаправить на страницу входа в систему и потребовать расширенные разрешения с параметрами. Это помогло мне, спасибо manuelpedrera за помощь.

$facebook->getLoginUrl(array('req_perms' => 'read_friendlists, [...]'));
0 голосов
/ 17 февраля 2011

Я думаю, что в некоторых браузерах есть проблема со сторонними куки.Вы тестируете в Safari?А также попробуйте добавить разрешения для loginUrl - это немного проще, чем добавить и запросить разрешения с помощью oauth.

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