Поведение события JS SDK auth.logout, похоже, недавно изменилось - что происходит? - PullRequest
1 голос
/ 12 января 2012

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

  1. Событие выхода из системы не срабатывает при выходе из системы - я использую тег JS XFBML для входа / выхода, например:

Примечание: при нажатии кнопки выхода из системы происходит выход из FB, но событие не запускается на моем сайте.

  1. Событие выхода из системысрабатывает при перезагрузке страницы при выходе из системы, что вызывает повторную загрузку страницы при возникновении события выхода из системы.Сейчас это не так уж важно, так как начальное событие выхода из системы не срабатывает.Однако до сегодняшнего дня событие выхода из системы происходило при выходе из системы и при каждой загрузке страницы (при выходе из системы), что означало, что она будет бесконечно перезагружать страницу с помощью перенаправления выхода из системы.

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

Код события:

FB.Event.subscribe('auth.logout', function(response) {

    window.location.href = '/logout.php';

    });

Примечание: я также использую php SDK для других функций на сайте - я использую последние версии обоих

Я нашел здесь еще один пост об этой проблеме, но решение состоит в том, чтобы просто удалить перезагрузку, что является ужасным решением - почему этот JS Event работает таким образом?

Спасибо!

1 Ответ

0 голосов
/ 15 января 2012

Ну, я нашел обходной путь, хотя я совсем не горжусь им.Я использую эти события:

 FB.Event.subscribe('auth.login', function(response) {
    setTimeout('document.location.reload()',0);
 });
 FB.Event.subscribe('auth.logout', function(response) {
    <? if ($_SESSION['user']['id']): unset($_SESSION['user']); ?>
    setTimeout('document.location.reload()',0);
    <? endif; ?>
 });

Я храню всю пользовательскую информацию в сеансе, и условие, касающееся SESSION, гарантирует, что страница не окажется в цикле.SetTimeout используется из-за перезагрузки расположения окна Facebook Javascript SDK в Firefox .Затем я добавил функцию jQuery для перезагрузки страницы после нажатия кнопки logoutButton:

$(function() {
    $('#logoutButton').click(function() {
        setTimeout('document.location.reload()',0);
    });
});

<span id="<?= $user ? "logout" : "login" ?>Button">
    <fb:login-button autologoutlink="true"></fb:login-button>
</span>

Я протестировал это на Firefox и Chrome и работал нормально.Это не реальное решение, это скорее уродливое исправление :), но я все равно решил его опубликовать.Сейчас я думаю о том, чтобы фактически оставить всю «операцию выхода из системы», потому что большинство пользователей все равно не хотят выходить из Facebook.

...