Проблема аутентификации Facebook - PullRequest
1 голос
/ 09 мая 2011

Я немного разозлился из-за постоянно меняющейся платформы Facebook, хрупкой структуры и отсутствия достойной и актуальной документации.

В настоящее время я переношу приложение из FBML теперь, когдаон устарел в приложении iFrame и имеет проблемы с аутентификацией.В настоящее время у меня есть глобальный скрипт начальной загрузки, который загружается при каждом просмотре страницы и содержит следующее, относящееся к аутентификации:

// attempt to authenticate against Facebook platform
require dirname(__FILE__) . '/facebook.php';

$facebook = new Facebook(array(
    'appId'  => APP_ID,
    'secret' => SECRET,
    'cookie' => true
));

$session = $facebook->getSession();

$user = null;
if ($session) {
    try {
        $uid = $facebook->getUser();
        $user = $facebook->api('/me');
    }
    catch (FacebookApiException $e) {
        error_log($e);
    }
}

if (!$user) {
    $loginUrl = $facebook->getLoginUrl(array(
        'req_perms' => 'email,user_likes',
        'next' => CANVAS_URL.'/'
    ));
    echo '<script>top.location.href="'.$loginUrl.'";</script>';
    exit;
}

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

Есть кто-нибудьрабочий пример аутентификации приложения Facebook iFrame, или вы можете увидеть что-то не так с фрагментом кода, который у меня есть выше?

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

РЕДАКТИРОВАТЬ: Забылиотметим, что он идет в цикле перенаправления с указанным выше кодом, но если я удаляю массив параметров из вызова $facebook->getLoginUrl(), то он в конечном итоге выходит из цикла и выходит из самого Facebook, вместо этого переходя на URL моего холста вне контейнера iFrame Facebook,Например, URL становится http://www.woohoobingo.com/facebookv2/?session={...} вместо http://apps.facebook.com/woohoobingo/.

Ответы [ 2 ]

2 голосов
/ 09 мая 2011

взломали его.Использовал следующий HTTP-заголовок вверху моего index.php файла:

header('P3P: CP="IDC DSP COR CURa ADMa OUR IND PHY ONL COM STA"');
0 голосов
/ 09 мая 2011

Эта строка работает для меня

header('P3P: CP="IDC DSP COR CURa ADMa OUR IND PHY ONL COM STA"');

Но, как вы сказали, он не работает в сафари, потому что он не исправляет его для хранения куки, тогда вы можете использовать альтернативу, которая отключает куки

$facebook = new Facebook(array(
    'appId'  => APP_ID,
    'secret' => SECRET,
    'cookie' => false
));

и попробуйте использовать токен доступа после аутентификации @access_token - это oauth access_token, который передается на вашу страницу холста в начальном запросе POST.

$facebook->api('/me?access_token='.$access_token);

Надеюсь, он работает

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