Можно узнать, вошел ли пользователь в facebook через API JavaScript? - PullRequest
15 голосов
/ 08 марта 2011

Этот вопрос не является дубликатом этого .

Я не хочу знать, авторизовал ли пользователь мое приложение, но если пользователь вошел в Facebook (полностью независим от моего приложения).

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

Когда пользователь заходит на Facebook, я хочу заменить html-код фрагментом комментариев на facebook.

Если нет, должна отображаться альтернативная форма комментария к старой школе.

Я бы регулярно извлекал комментарии из графика api, чтобы они были в моей базе данных, а комментарии, выполненные с использованием классической формы, должны публиковаться поверх API (не обязательно как пользователь, это может быть учетная запись администратора ...) синхронизировать все данные.

Я посмотрел документацию по Javascript SDK, также обнаружил функцию getloginstatus , но документация плохая и не окончательная. Я знаю, что в кодах Facebook также часто есть функции, которые не документированы или не реализованы в API более высокого уровня.

Мои вопросы:

  • Можно ли как-нибудь узнать, вошел ли пользователь в facebook?

  • Могу ли я каким-то образом получить ответный вызов или уведомление о размещенных комментариях, чтобы я мог запустить синхронизацию с моей базой данных или мне нужно "сканировать" график API на регулярной основе?

Ответы [ 3 ]

33 голосов
/ 04 июля 2011

Существует не взломанный, официально поддерживаемый способ сделать это для Facebook (я думаю, что последняя версия документации была более ясной по этому вопросу).Используя Javascript SDK , вы можете сделать:

<div id="fb-root"></div>
<script>
  window.fbAsyncInit = function() {

    FB.init({appId: 'YOUR APP ID', status: true, cookie: true,
             xfbml: true});

    FB.getLoginStatus(function(o) { 
       if (!o && o.status) return;
       if (o.status == 'connected') {
          // USER IS LOGGED IN AND HAS AUTHORIZED APP
       } else if (o.status == 'not_authorized') {
          // USER IS LOGGED IN TO FACEBOOK (BUT HASN'T AUTHORIZED YOUR APP YET)
       } else {
          // USER NOT CURRENTLY LOGGED IN TO FACEBOOK
       }
    });

  };

  (function() {
    var e = document.createElement('script'); e.async = true;
    e.src = document.location.protocol +
      '//connect.facebook.net/en_US/all.js';
    document.getElementById('fb-root').appendChild(e);
  }());

</script>

В сторону: если бы XAuth завоевал популярность, можно было бы сделать это в более универсальноми поддерживаемый способ для любого сайта, поддерживающего этот стандарт.

4 голосов
/ 10 марта 2011

Эта статья

https://grepular.com/Abusing_HTTP_Status_Codes_to_Expose_Private_Information

идентифицирует угрозы безопасности в Google и Facebook, которые позволят вам определить, вошел ли пользователь в систему. Пока не существует официального API для проверки, если пользовательвошел в систему без того, чтобы пользователь дал вам явное разрешение на доступ к этой информации, в приведенной выше статье показано, как можно «угадать», вошел ли пользователь в систему или нет.

Примечание.поэтому гарантированно не будет работать в будущем, если или когда Google и Facebook обнаружат эти угрозы безопасности.

1 голос
/ 23 сентября 2011

Я также столкнулся с аналогичными требованиями и решил свою проблему с помощью следующего кода;Используя Javascript SDK, я использовал объект FB.FB - это объект facebook, у него есть свойство _userStatus, его можно использовать следующим образом.

if(FB._userStatus == "connected")
{
// USER IS LOGGED IN AND HAS AUTHORIZED APP 
}
else if(FB._userStatus == "notConnected"){
   // USER IS LOGGED IN TO FACEBOOK (BUT HASN'T AUTHORIZED YOUR APP YET)  
}
else if(FB._userStatus == "unknown")
{
    // USER NOT CURRENTLY LOGGED IN TO FACEBOOK 
}

Приведенный выше код очень полезен.Его можно использовать в любой части страницы, если длинный объект FB не равен нулю.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...