Я немного разозлился на платформе 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; }
Это было составлено на примерах в официальном PHP PHP SDK и документации разработчика, но при первой загрузке приложение просто оборачивается в неприятном круге перенаправления, и я понятия не имею, с чего начать отладку, о которой мне нечего не упоминать facebook.
Кто-нибудь получил рабочий образец аутентификации приложения iFrame Facebook или может увидеть что-то по своей сути неправильно с фрагментом кода, который у меня выше?
Заранее спасибо.
EDIT: Забыл упомянуть, что он переходит в цикл перенаправления с указанным выше кодом, но если я удалю массив параметров из вызова $facebook->getLoginUrl()
он в конечном итоге выйдет из цикла и из самого Facebook, вместо этого мой URL холста вне контейнера iFrame Facebook. Например, URL-адрес становится http://www.woohoobingo.com/facebookv2/?session={...}
вместо http://apps.facebook.com/woohoobingo/
.
Эта линия работает для меня
header('P3P: CP="IDC DSP COR CURa ADMa OUR IND PHY ONL COM STA"');
Но, как вы сказали, он не работает в сафари, потому что он не исправляет его для хранения файлов cookie, тогда вы можете использовать альтернативу. Отключение файлов cookie.
$facebook = new Facebook(array( 'appId' => APP_ID, 'secret' => SECRET, 'cookie' => false ));
и попытайтесь использовать токен доступа после аутентификации. @access_token – это oauth access_token, который передается на вашу страницу холста в исходном запросе POST.
$facebook->api('/me?access_token='.$access_token);
Надеюсь, что это работает
Взломали его. Использовал следующий HTTP-заголовок в верхней части моего файла index.php
:
header('P3P: CP="IDC DSP COR CURa ADMa OUR IND PHY ONL COM STA"');