Кнопка входа в Facebook больше не появляется после входа в систему и выхода из нее - PullRequest
4 голосов
/ 04 сентября 2011

Моя кнопка входа в Facebook работает отлично:

<fb:login-button length="long" background="light" perms="email"
                 size="medium" onlogin="myLoginCode()"></fb:login-button>

После входа пользователя эта кнопка входа в Facebook исчезает. На моей кнопке выхода у меня есть что-то вроде этого:

<a href="/security_logout" onclick="FB.logout();">logout</a>

Когда я нажимаю там, я отключаюсь как от механизма аутентификации Facebook, так и от моего собственного сайта. Итак, я снова вижу кнопку «Войти через Facebook».

Проблема внезапно я заметил, когда вы выходите из системы (и вызывается FB.logout()), логин на Facebook не появляется снова! Вы как бы застряли тогда. Что изменилось? Если я позвоню из Firebug:

FB.getLoginStatus(function(response) {
    if (response.authResponse) alert(response.authResponse);
    else alert("not logged in");
});

Я получу предупреждение о том, что не вошел в систему. Однако, если я позвоню FB.login(), я получу это:

FB.login () вызывается, когда пользователь уже подключен

Есть идеи, что происходит? Как заставить кнопку логина Facebook снова появляться после того, как кто-то вышел из системы?

Ответы [ 3 ]

2 голосов
/ 04 сентября 2011

Психическая отладка: FB.logout() делает запрос AJAX, этот метод немедленно возвращается, когда запрос сделан, поэтому ваш браузер переходит на ваш URL /security_logout и сбрасывает соединение AJAX, прежде чем сервер Facebook сможет его обработать.

Полагаю, вам нужно взглянуть на зацепление ответа на выход из системы, дождаться его завершения и только затем перейти к /security_logout, что-то вроде этого (не проверено, я только что прогуглил API для FB.logout()):

<a href="#" onclick="my_fb_logout()">logout</a>

.

function my_fb_logout() {
    FB.logout(function (response) {
        // turn https://www.mywebsite.com/current_path?query_string=xyz#section1
        // into https://www.mywebsite.com
        var url_string = window.location.href;
        var base_url_len = url_string.length - window.location.pathname.length - window.location.search.length;
        var base_url = url_string.substr(0, base_url_len);

        // append /security_logout and redirect to your site's logout page
        var new_url = base_url + "/security_logout";
        window.location.href = new_url;
    });

    // this may not the best way to prevent bubbling of the event (navigating to # in the current page),
    // but will do fine in this case I believe 
    return false;
}
0 голосов
/ 10 февраля 2012
<div id="fb-btn"><div class='fb-login-button' data-scope='email,user_checkins,offline_access,publish_stream,read_stream'>Facebook</div></div>
<div id='fb-root'></div>
<script>
  window.fbAsyncInit = function() {
    FB.init({
      appId: '###########',
      cookie: true,
      xfbml: true,
      oauth: true
    });
    FB.Event.subscribe('auth.login', function(response) {
      window.location="http://###########";
    });
    FB.getLoginStatus(function(response) {
      if (response.status === 'connected') {
        document.getElementById('fb-btn').innerHTML = "<a href='http://###########' class='fb_button fb_button_medium'><span class='fb_button_text'>Facebook</span></a>";
      }
    });
  };
  (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>
0 голосов
/ 04 сентября 2011

Вы можете подписаться на auth.logout с помощью Javascript SDK http://developers.facebook.com/docs/reference/javascript/FB.Event.subscribe/ Когда пользователь выходит из Facebook, вы можете снова показать кнопку входа в систему.

...