2012-01-12 3 views
1

Я использовал код ниже в сочетании с JS SDK в течение нескольких месяцев. За последние несколько дней это давало мне всевозможные проблемы.Поведение JS SDK auth.logout, похоже, изменилось недавно - что происходит?

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

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

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

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

Код события:

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

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

    }); 

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

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

Спасибо!

+0

У меня возникли сходные трудности, вы сделали какой-то прогресс? – tsusanka

+0

Моим решением было просто удалить функции выхода из FB с сайта. Я полагаю, что люди вообще не хотят выходить из FB с моего сайта (и, возможно, это то, о чем думает FB), поэтому я просто разрешаю прямое выход из моего сайта, который не касается учетных данных FB. Единственное, что я хотел бы иметь, это пожар события выхода из системы при выходе пользователя из системы через FB, чтобы я знал, что они не полностью вошли на мой сайт - он использует много ajax, поэтому пользователь не загружает новые страницы что часто и многие функции нарушаются, если FB-соединение отсутствует, так что теперь я должен проверить статус –

ответ

0

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

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; ?> 
}); 

хранить всю информацию о пользователях в сессии и состояние относительно ЗАСЕДАНИЯ убеждается страница не заканчивается в цикле. SetTimeout используется из-за Facebook Javascript SDK window location reload not working on 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 в любом случае.

+0

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