Приложение Facebook Connect внутри iframe не работает в IE7 - PullRequest
5 голосов
/ 16 февраля 2009

Я создаю приложение Facebook Connect, которое работает внутри гаджета Google. Быть гаджетом означает, что приложение работает внутри iframe. Внутри приложения есть форма, которая позволяет зарегистрированным пользователям оставлять комментарии. Представление сделано с использованием AJAX, но я получаю те же результаты с нормальной формой. Проблема в том, что мне нужно получить идентификатор пользователя на Facebook. В Firefox он работает нормально, но в Internet Explorer 7 я получаю следующую ошибку:

 'A session key is required for calling this method'

Я полагаю, что это связано с тем, как IE обрабатывает сторонние файлы cookie, потому что, если я захожу в «Параметры Интернета» / «Конфиденциальность» или «Дополнительно» и проверяю «Переопределить автоматическую обработку файлов cookie» и принимаю все файлы «cookie», все работает нормально. Я не могу передать идентификатор Facebook из javascript, потому что любой может подделать его.

РЕДАКТИРОВАТЬ: если я открою содержимое iframe напрямую, приложение работает нормально. Проблема действительно связана с моделью безопасности IFRAME и IE.

Что я делаю не так? Как я могу обойти эту проблему?

Ответы [ 4 ]

7 голосов
/ 17 февраля 2009

Вы пытались добавить политику P3P?

Если в настройке ответа для файла cookie используется компактная политика, IE будет использовать ее, чтобы определить, разрешать или нет сторонний файл cookie.

3 голосов
/ 30 июня 2009

Я решил ту же проблему, изменив способ проверки того, вошел ли пользователь на странице PHP после входа в FB-соединение.

Итак, они входят в FB Connect с IE7. Следующая и последующая загрузка страниц, где мне нужно проверить, действительно ли они вошли в FaceBook. Я использовал следующий код (обратите внимание, что $ facebook-> require_login () и другие функции не работали - они возвращали ноль только в IE 7):

// Validate from Facebook that session is valid and user is logged in. require_once 'facebook/facebook.php'; $facebook = new Facebook(YourAppsAPIKeyPublic, YourAppsAPIKeySecret); $facebook->api_client->session_key = $this->userAPISessionKey; $fb_user_id = $facebook->api_client->users_getLoggedInUser();

Теперь $ fb_user_id должен иметь действительный идентификатор пользователя FaceBook.

Относительно политики конфиденциальности и facebook connect + IE 7:

Хотя это не сработало для меня, похоже, сработало для других. в HTAccess:

Header append P3P "CP=\"HONK\""

или в файлах PHP:

header('P3P: CP="CAO PSA OUR"'); или же header('P3P: CP="HONK"');

ссылка: http://forum.developers.facebook.com/viewtopic.php?id=28636

ASP.NET:

protected void Application_BeginRequest(Object sender, EventArgs e)
{
    HttpContext.Current.Response.AddHeader("p3p", "CP=\"CAO PSA OUR\"");
}
1 голос
/ 16 февраля 2009

Я нашел обходной путь, который работает, хотя он немного уродлив: когда пользователь нажимает кнопку «Войти», он открывает всплывающее окно, которое приходит с моего сайта и содержит кнопку входа в Facebook Connect. После входа пользователя я закрываю всплывающее окно и перезагружаю iframe.

Это действительно ужасно, потому что открывает два всплывающих окна, но, по крайней мере, работает. Я определю, включены ли файлы cookie с помощью javascript, и если они включены, я пропущу первое всплывающее окно.

Я все еще открыт для лучших решений ...


Редактировать : Facebook теперь использует «фальшивое» всплывающее окно внутри моего всплывающего окна вместо открытия другого окна. Теперь у меня есть только одно всплывающее окно, которое мне подходит.

0 голосов
/ 22 марта 2010

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

http://forum.developers.facebook.com/viewtopic.php?id=452

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