it-swarm.com.ru

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

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

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

возвращает: response.status == "подключен"

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

Еще один пример использования FireBug:

enter image description here

18
Casey Flynn

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

FB.logout(function(response) {
  FB.Auth.setAuthResponse(null, 'unknown');
  ...
});
13
Sean Kinsey

Смотрите http://hustoknow.blogspot.com/2012/01/dealing-with-zombie-facebook-cookies.html

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

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

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

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

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

3
NavCore

Поскольку я потратил много времени, чтобы выяснить, что именно происходит в выходе из 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

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

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

2
vishnu lal

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

1
Abdul Ahad

У меня такой же опыт с 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 ().

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

1
Pat James

в приложении 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
aamir sajjad

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

0
Shaun

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

Создайте событие 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
sajanyamaha