Facebook JS SDK FB.logout() не завершает сеанс пользователя

Я пытаюсь вывести пользователя из Facebook с помощью Facebook JS SDK, но призывая:

FB.logout(function(response){
    console.log(response);
});

возвращает: response.status == "connected"

И только после обновления страницы SDK понимает, что сеанс закончился. Кто-нибудь знает, что может вызвать такое поведение? Этот код ранее работал в моем приложении и недавно начал вести себя таким образом.

Другой пример использования FireBug:

enter image description here

Ответ 2

См. http://hustoknow.blogspot.com/2012/01/dealing-with-zombie-facebook-cookies.html

Когда вы выходите из системы, запрос на междоменный запрос отправляется в Facebook, чтобы аннулировать сеанс. Когда вы нажмете reload, другой запрос будет отправлен на сайт Facebook - поскольку FB распознает cookie как недействительный, он корректно удаляет файл cookie из вашего браузера.

Я подозреваю, что это ошибка регулярного выражения в том, как они забыли проанализировать файл cookie fbm_, недавно введенный в последний день или около того. Я просто удивлен, что это исправление не было нажато.

Ответ 3

FB.logout(function(response) {
  ...
});

Этот метод FB.logout работает на 100%. Проблема в том, что пользователи пытаются вызвать его из localhost, который не работает.

Попробуйте позвонить ему с сервера.

Ответ 4

У меня такой же опыт работы с FB.Logout(), который не работает как рекламируемый. В качестве обходного пути я использую нижеследующую функцию javascript, чтобы проверить, зарегистрирован ли пользователь, и если да, переадресуйте на https://www.facebook.com/logout.php с URL-адресом последующая страница для загрузки и токен доступа:

    function reallylogout() {
      FB.getLoginStatus(function (response) {
        if (response.authResponse) {
           window.location = "https://www.facebook.com/logout.php?next=" +
             'URL to redirect to' +
             "&access_token=" + response.authResponse.accessToken;
        } else {
           $("#loginButtonDiv").show();
           $("#logoutButtonDiv").hide();
        }
      });
    }

Бит show/hide - это просто jQuery, чтобы показать или скрыть divs, в которых есть кнопка входа и выхода из системы. Кнопка logout onclick запускает функцию realLogout().

Это работает для моего приложения.

Ответ 5

Я столкнулся с подобной проблемой. Я использовал FB.getLoginStatus() после выхода из системы.

Ответ 6

Он выглядит сломанным в Facebook. На FB rell вы можете войти, но функция выхода из системы ничего не делает. http://www.fbrell.com/auth/all-in-one

Ответ 7

Хорошо, ребята, я нашел решение для этого:

Добавьте событие onClick для тега logout <a>, как это показано

onclick="FB.logout(function() { document.location.reload(); });"

Все вместе:

<a href="#" 
   id="auth-logoutlink"
   style="float:left;font-size: small;"
   onclick="FB.logout(function() { document.location.reload(); });">
   [logout]
</a>

Ответ 8

в приложении asp.net mvc я сделал это как следующее.


<a href="javascript:void(0);" class="logOff">Log out</a>

$(function () {


    $(".logOff").click(function () {

        //check if logout is 
        FB.getLoginStatus(function (response) {
            console.log('inside login status');
            if (response.status === 'connected') {
                // the user is logged in and has authenticated your
                // app, and response.authResponse supplies
                // the user ID, a valid access token, a signed
                // request, and the time the access token 
                // and signed request each expire
                var uid = response.authResponse.userID;
                var accessToken = response.authResponse.accessToken;
                FB.logout(function (response) {

                    FB.Auth.setAuthResponse(null, 'unknown');

                });
            } else if (response.status === 'not_authorized') {
                // the user is logged in to Facebook, 
                // but has not authenticated your app

            } else {
                // the user isn't logged in to Facebook.
                console.log('response status not logged in');
            }
        });
        window.location.href = '@Url.Action("LogOff", "Account")';

    });

Ответ 9

Возможно, это не сработает, потому что вы не включаете в себя свой Facebook-приложение. Это работает для меня вот так:

 Ext.get('auth-logoutlink').on('click', function(){   
                  FB.getLoginStatus(function (response) {
                    if (response.authResponse) {
                       window.location = "https://www.facebook.com/logout.php?confirm=1&api_key=**MYAPIKEY**&next=" +
                         '**MYWEBSITEURL**' +
                         "&access_token=" + response.authResponse.accessToken;
                    } else {
                       //HIDE **LOGOUT BUTTON**
                       //SHOW **LOGIN BUTTON**
                    }
                  });
        });