Facebook getLoginStatus функция возврата не срабатывает при обновлении страницы - PullRequest
1 голос
/ 11 февраля 2012

Я использую Facebook Javascript SDK. Для моего приложения у меня может быть пользователь, либо войдите в систему с помощью Facebook, Twitter или учетной записи (адрес электронной почты / пароль). Я могу заставить аутентификацию Facebook работать. После успешной аутентификации Facebook я создаю сеанс пользователя, и пользователь переходит к использованию приложения. У меня есть кнопка выхода из системы в приложении, которая уничтожает сеанс и отправляет пользователя обратно на страницу входа.

Когда пользователь возвращается на страницу входа, он все еще подключен к Facebook. Я пытался вызвать FB.logout, но функция возврата для getLoginStatus никогда не срабатывает. Что я делаю не так?

Вот мой код:

window.fbAsyncInit = function() 
{ 
    FB.init({appId: 99999999, status: true, cookie: true, xfbml: true, oauth: true}); 

    //LOGOUT FB USER
    FB.getLoginStatus(function(response) 
    {
        alert("status: " + response.status);
        if (response.authResponse) 
        {
            FB.logout();
            alert('logged out');
        }

    }, true);   

    //SUBSCRIBE TO LOGIN EVENT
    FB.Event.subscribe('auth.login', function(response) 
    {
        if(response.authResponse) 
        {
            FB.api('/me', function(response) 
            {
                             //at this point user has been authenticated so they can continue with app...
            });                 
        }
        else
        {
            alert("Ooops, the Facebook authentication has failed.  Please try again.");
        }
    });
};

(function(d){
    var js, id = 'facebook-jssdk'; 
    if (d.getElementById(id)){ return; }
    js = d.createElement('script'); js.id = id; js.async = true;
    js.src = "//connect.facebook.net/en_US/all.js";
    d.getElementById('fb-root').appendChild(js);
    }(document));   

Каковы лучшие практики по включению аутентификации Facebook в ваше приложение? Как вы управляете выходом пользователя из вашего приложения, не выходя из него вообще из Facebook?

Спасибо за ваше время.

Ответы [ 2 ]

1 голос
/ 11 февраля 2012

Извините, я неправильно понял ваш вопрос.

SDK FB поддерживают выход только из FB, и затем вы можете использовать обратный вызов для выхода пользователя с вашего собственного сайта. В этом случае вы хотите выйти из системы с вашего собственного сайта, но не из FB - тогда вам не следует использовать SDK для выхода из системы, поскольку это используется для выхода из системы из FB.

Вместо этого вам нужно будет создать какую-то "обращенную" систему входа в систему.

  1. Если пользователь входит в систему с помощью FB, установите сеанс / файл cookie «mySiteLogin».
  2. При проверке авторизации проверьте FB-логин и "mySiteLogin".
  3. Когда пользователь нажимает кнопку «Выйти из системы», снимите / удалите «mySiteLogin».

Это всего лишь решение макушки моей головы. Но я тоже не смог найти никакого готового решения.

0 голосов
/ 14 февраля 2012

Есть три вещи, которые все пытаются сделать с помощью логина

  • status: true

  • FB.getLoginStatus(function(response)

  • FB.Event.subscribe('auth.login'

Когда для статуса установлено значение true, SDK будет вызывать facebook, чтобы узнать, аутентифицирован ли текущий пользователь.Затем у вас также есть проверка еще раз getLoginStatus, а затем, когда он работает асинхронно, вы подписываетесь на auth.login.

auth.login будет вызываться даже из вызова status: true и, возможно, снова извызов getLoginStatus.

Вместо того, чтобы делать alert с, которые прерывают поток, делайте console.log с, чтобы вы могли видеть, что вызывается, когда.

Что касается вопроса: «Я не хочу выводить их из Facebook из своего приложения. Это вообще возможно?»

Да, вы можете выйти из приложения черезотправка HTTP DELETE на me/permissions с токеном доступа этого пользователя.Это заставит их повторить ваше приложение в следующий раз.Это единственный эффективный способ, которым я знаю, чтобы вытащить их «из моего приложения», но не выходить из их сеанса в Facebook.

...