2012-02-11 3 views
1

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

Когда пользователь возвращается на страницу входа, они все еще подключены к 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 в приложение? Как вы управляете протоколированием пользователя из своего приложения, не выгружая его из фейсбука?

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

ответ

1

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

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

Вместо этого вам нужно будет сделать какую-то «восстановленную» систему входа.

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

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

0

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

  • status: true

  • FB.getLoginStatus(function(response)

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

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

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

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

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

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

Смежные вопросы