Кнопка входа в Facebook: Могу ли я предотвратить автоматическую перезагрузку страницы после входа в систему? - PullRequest
2 голосов
/ 26 августа 2011

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

Поскольку страница мгновенно перезагружается, кажется, что мой собственный скрипт "onlogin" (который проверяет пользователя FB и регистрирует его на МОЕМ сайте), кажется, отключается или не срабатывает,Таким образом, пользователь не может войти на сайт.

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

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

<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>

РЕДАКТИРОВАТЬ Я также пробовал этот код кнопки без каких-либо опций илисобытие "onlogin", и я получаю то же поведение.

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

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

Ответы [ 3 ]

1 голос
/ 26 августа 2011

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

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

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

  1. При загрузке страницы (на самом деле после FB.init) Facebook автоматически войдет в систему.
  2. Вы должны обработать этот логин и войти на ваш сайт через ajax-вызов.После успешного входа в систему установите переменную JS, в которой указано, что пользователь вошел в систему.
  3. Присоедините событие к кнопке входа в систему.После того, как пользователь нажмет кнопку входа, проверьте, вошли ли они в систему, и обновите страницу.
1 голос
/ 30 августа 2011

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

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

Итак, я изменил эту строку:

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

до

FB.Event.subscribe('auth.logout', function(response) {
    return false;
});
0 голосов
/ 26 августа 2011

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

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