Кнопка входа в Facebook: могу ли я предотвратить перезагрузку страницы после входа в систему?

Я пытаюсь перейти на 3.1 SDK и столкнуться с некоторым проблемным поведением: когда я вхожу в систему через кнопку входа FB на моем сайте, страница перезагружается, несмотря на то, что у меня есть собственный метод JS, определенный в кнопке входа в систему " onlogin ".

Поскольку страница мгновенно перезагружается, кажется, что мой собственный скрипт «onlogin» (который проверяет пользователя FB и записывает их на MY-сайт), кажется, отключен или не срабатывает. Таким образом, пользователь не может войти на сайт.

Другой побочный эффект свойственен: после входа в FB vi на моем FB-сайте моего сайта я появлюсь, когда вы заходите на сайт Facebook.com, но через несколько секунд на Facebook.com появится всплывающее сообщение «Не авторизовано. Войдите в систему, чтобы продолжить (ДА НЕТ). "

Как обычно, я не могу найти помощь в документах, и я становлюсь очень тупым. Вот мой FB init:

<script> window.fbAsyncInit = function() { FB.init({ appId: '<?php echo cConfiguration::$facebookAppId;?>', cookie: true, xfbml: true, oauth: true }); FB.Event.subscribe('auth.logout', function(response) { window.location = '/signout.php5'; }); }; (function() { var e = document.createElement('script'); e.async = true; e.src = document.location.protocol + '//connect.facebook.net/en_US/all.js'; document.getElementById('fb-root').appendChild(e); }()); </script> 

Кнопка входа в систему:

 <fb:login-button length="long" autologoutlink="false" onlogin="fbLogin();"></fb:login-button> 

EDIT Я также пробовал этот код кнопки без каких-либо параметров или событий «onlogin», и я получаю такое же поведение.

Итак, мои вопросы:

  • Ожидается ли, что страница должна перезагрузиться после входа в систему через кнопку входа в систему, хотя они не подписали событие auth.login в моем FB.init?
  • Если да, есть ли способ отменить это поведение?
  • Здесь что-то не так?

Вы подключили обработчик событий для выхода, но не для входа. Добавь это.

 FB.Event.subscribe('auth.login', function(response) { return false; }); 

Хотя предотвращение перезагрузки, вероятно, не то, что вы хотите сделать. Вместо того, что я нашел, работает хорошо, это определить, нажал ли пользователь кнопку входа или нет. Процесс есть.

  1. При загрузке страницы (ну, собственно, после FB.init) facebook автоматически войдет в систему.
  2. Вы должны обрабатывать этот логин и регистрировать пользователя на своем сайте с помощью вызова ajax. После успешного входа в систему будет зарегистрирована переменная JS, в которой указано, что пользователь вошел в систему.
  3. Прикрепите событие к кнопке входа. Как только пользователь «нажмет» кнопку входа в систему, проверьте, вошли ли они в систему и обновили страницу.

Хорошо, я выяснил причину, по-видимому, неконтролируемой перезагрузки страниц

По какой-то причине событие auth.logout запускалось всякий раз, когда я входил в систему через подсказку входа в Facebook.

Поэтому я изменил эту строку:

 FB.Event.subscribe('auth.logout', function(response) { window.location = '/signout.php5'; }); 

в

 FB.Event.subscribe('auth.logout', function(response) { return false; }); 

Используйте это как свою кнопку входа, я считаю, что в вашем fbLogin () должно быть что-то; param, который перезагружает страницу. Обычное поведение – просто обновить кнопку, обновление страницы должно быть принудительно с помощью Event.subscribe.

 <fb:login-button autologoutlink="false"></fb:login-button>