Facebook PHP SDK работает в Firefox, но не в Chrome

Вопрос может показаться немного скучным на первый взгляд, и я озадачен собой.. Я разрабатываю приложение PHP, которое в значительной степени опирается на API Facebook, поэтому использует PHP SDK для подключения и получения пользователя, вошедшего в систему в данный момент через

$fb->getUser();

Я также включил Javascript SDK, но в настоящее время он только загружает вошедшего в систему пользователя и печатает его объект данных на консоль.

Сегодня я начал реализовывать локальную dev-версию приложения, настроил второе dev-приложение на Facebook, подключил их и вуаля.. это не работает. getUser() всегда возвращает 0 для меня локально. Что я только что узнал, так это то, что он работает в Firefox. Я изменяю значение getUser () и получаю полный идентификатор пользователя (мой) в Firefox, но 0 в Chrome (и да, я вошел в Facebook в обоих браузерах).

Я очистил кеш, куки, уничтожил сессию... Я просто не могу представить, какая разница, что браузер делает для запроса PHP к Facebook? Кто-нибудь когда-либо испытывал что-то подобное? Очевидно, что app_key и secret должны быть правильными, потому что они работают в Firefox.


Изменить: просто для справки, живая версия приложения (размещена) хорошо работает в Chrome, это только очень локальное приложение, которое я не могу заставить работать.


Редактирование #2: это Javascript, который я запускаю в приложении

  <div id="fb-root"></div>
  <script>
    window.fbAsyncInit = function() {
      FB.init({
        appId      : {$_connect.app_id}, // App ID
        channelUrl : '{$_connect.channel_file}', // Channel File
        status     : true, // check login status
        cookie     : true, // enable cookies to allow the server to access the session
        xfbml      : true  // parse XFBML
      });
    {if !$_user.is_authorized}
    // listen for and handle auth.statusChange events
    FB.Event.subscribe('auth.statusChange', function(response) {
      if (response.authResponse) {
        // user has auth'd your app and is logged into Facebook
        FB.api('/me', function(me){
          if (me.name) {
            console.log(me);
            //window.location = 'index.php';
            // redirection is currently causing loop
          }
        })
      } else {}
    });
    {/if}
    };
    // Load the SDK Asynchronously
    (function(d){
       var js, id = 'facebook-jssdk', ref = d.getElementsByTagName('script')[0];
       if (d.getElementById(id)) {return;}
       js = d.createElement('script'); js.id = id; js.async = true;
       js.src = "//connect.facebook.net/de_DE/all.js";
       ref.parentNode.insertBefore(js, ref);
     }(document));
  </script>

2 ответа

Решение

Я просто не могу представить, какую разницу имеет браузер для запроса PHP к Facebook?

Единственное, конечно, могут быть параметры.

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

Итак, проверьте, принимает ли Chrome эти файлы cookie, когда вы тестируете свое приложение локально.

Я думаю, вам нужно пройти аутентификацию через JS SDK в обоих браузерах, я полагаю, что за запросами JavaScript есть некоторая логика OAuth.

Однако в настоящее время Chrome пытается блокировать или просто не выполнять междоменные js-запросы. Попробуйте заглянуть в сетевую консоль, если что-то подобное случится с вами. Если это так

  • Попробуйте проверить домен + протокол /http(s)/ вашей локальной среды. Я считаю, что вы должны использовать https при вызове js api
  • Подумайте об использовании файла канала, который должен решить / предотвратить проблемы межбраузерных вызовов, как описано в документации по SDK JavaScript

Если ничто из вышеперечисленного не поможет вам, я думаю, вы могли бы разработать приложение, протестировать его на FFox, а затем, когда оно развернуто, протестировать его с реальными настройками.

Удачи.

Другие вопросы по тегам