Почему FB.getLoginStatus () возвращает статус ответа «неизвестно», даже если я вошел в Facebook и FB.logout () не был вызван?

#facebook #session #facebook-javascript-sdk

#Facebook #сессия #facebook-javascript-sdk

Вопрос:

Мы разрабатываем веб-сайт по адресуwww.bodecanada.com . Один из методов входа, который мы предоставляем, — это facebook. Мы также пытаемся отслеживать, зарегистрирован ли пользователь в facebook или нет, когда обновляем страницу или открываем сайт в новой вкладке. Мы делаем это, вызывая FB.getLoginStatus() (из Facebook js sdk). Однако мы обнаруживаем, что в нескольких случаях — например, при открытии сайта на новой вкладке в Safari — статус ответа, который возвращается от FB.getLoginStatus, «неизвестен». В документации Facebook SDK говорится об этом о статусе «неизвестно»:

FB.getLoginStatus() позволяет вам определить, вошел ли пользователь в Facebook и прошел ли проверку подлинности вашего приложения. Для пользователя возможны три состояния:

  1. Пользователь вошел в Facebook и авторизовал ваше приложение. (подключен)
  2. Пользователь вошел в Facebook, но не авторизовал ваше приложение.(not_authorized)
  3. Пользователь либо не зарегистрирован в Facebook, либо явно вышел из вашего приложения, поэтому он не пытается подключиться к Facebook, и, следовательно, мы не знаем, аутентифицировали ли они ваше приложение или нет. (неизвестно)

В данном случае мы имеем дело с №3. Однако, когда я захожу на facebook, я обнаруживаю, что не вышел из системы. Но в то же время я не «явно вышел из системы» (что означает, что вызывается FB.logout ()) с моего сайта. Итак, почему он возвращает «неизвестно»?

Одно из решений, которое я нашел в Google, гласит, что нужно добавить cookies: true в FB.init (), чтобы включить сторонние cookies, поэтому я так и сделал:

           FB.init({
            appId      : process.env.FB_APP_ID,
            cookie     : true,                             
            xfbml      : true, 
            version    : 'v2.2'
          });
  

Но это ничего не меняет.

Итак, почему FB.getLoginStatus() возвращает статус ответа «неизвестно», когда я открываю сайт на новой вкладке?

Спасибо.

Ответ №1:

У меня была та же проблема, когда я закрывал и снова открывал браузер. Что я сделал, так это поместил fb.login функцию, если статус неизвестен. Но в браузере должны быть включены окна emergent windows:

 function statusChangeCallback(response) {  
  if (response.status === 'connected') {   
    userId = response.authResponse.userID;
    accessToken = response.authResponse.accessToken;
    var userinfo = getUserInfo(userId);
  } else if (response.status === 'unknown') {            
    FB.login(function(response) {
      statusChangeCallback(response)
    }, {scope: 'public_profile,email'});
  }
}
  

Ответ №2:

Я получаю ту же проблему, также используя «cookie: true». Но .. если я помещу вызов FB.login в блок «статус === ‘неизвестно'», я получу заблокированное всплывающее окно FB oauth — это пустое окно. Я знаю, что я вошел в Facebook (это на следующей вкладке), я просто не понимаю, почему FB.LoginStatus всегда возвращает «неизвестно».