Facebook JS SDK FB.logout () не завершает сеанс пользователя - PullRequest
20 голосов
/ 11 января 2012

Я пытаюсь выйти из Facebook с помощью JS SDK Facebook, однако звоню:

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

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

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

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

enter image description here

Ответы [ 10 ]

14 голосов
/ 14 января 2012

https://developers.facebook.com/bugs/245362365535898?browse=search_4f112135664703a96454690 Это ошибка в JS SDK, которая теперь исправлена, и ее нужно вставить не слишком долго. До этого вы можете сделать следующее

FB.logout(function(response) {
  FB.Auth.setAuthResponse(null, 'unknown');
  ...
});
3 голосов
/ 01 сентября 2016
FB.logout(function(response) {
  ...
});

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

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

3 голосов
/ 14 января 2012

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

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

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

2 голосов
/ 11 июля 2018

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

Во-первых, пожалуйста, прочитайте документацию здесь

Человек входит в Facebook, а затем входит в ваше приложение.После выхода из приложения этот человек все еще входит в Facebook.

этот момент убил 90% моего времени.Когда я вошел в систему с facebook.com и попытался проверить кнопку входа в моем приложении, это работало как ожидалось, но выход из системы не прерывал сеанс.

Решение или исправление: в соответствии со сценариями, приведенными в документе, он не прекратит сеанс пользователя, так как логин не инициирован из приложения, это с facebook.com.поэтому в этом случае fb не завершит сеанс.

Когда вы входите в fb, из вашего приложения (новый логин в качестве имени пользователя и пароля) система рассматривает источник / триггер сеанса как ваше приложение.поэтому, когда вы выходите из системы (window.FB.logout или FB.logout), он полностью завершает сеанс пользователя.

Поэтому, пожалуйста, выйдите из facebook.com перед проверкой функциональности входа в приложение.

Как уже упоминалось, используйте следующий код для выхода из системы

FB.logout(function(response) {
 // response from logout will have authResponse with access_token so better to test the status as it will return "unknown"
 if(response.status !== "connected") { } \\ do some check on the status of the login before considering successful logout.
});

Последнее, но не менее важное: для тестирования с локального хоста, пожалуйста, обновите настройки в FB APP

  1. Обновление Домены приложений до localhost
  2. URL сайта под Веб-сайты до http://localhost:3000/

Это решит проблемы, возникающие при тестировании с localhost

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

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

1 голос
/ 14 января 2012

У меня такое же впечатление, что 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, чтобы показать или скрыть div, в которых есть кнопки входа и выхода. Нажатие кнопки выхода из системы вызывает функцию realLogout ().

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

0 голосов
/ 10 июля 2013

в приложении 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's 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")';

    });
0 голосов
/ 21 сентября 2012

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

Создайте событие onClick для выхода из системы <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>
0 голосов
/ 06 мая 2012

Это может не сработать, потому что вы не включили свой ключ приложения 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**
                    }
                  });
        }); 
0 голосов
/ 17 января 2012

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

...