2013-08-22 3 views
1

Эй, поэтому мне трудно понять, как получить данные от пользователя, который входит на мой сайт, в настоящее время я использую javascript sdk, но я пытаюсь выяснить, как правильно запрашивать данные пользователя, а затем, как отправить его на моей стороне сервера ... Я думал, что это может быть что-то вродеИзвлечь данные из facebook api для пользователя

req.body.id 

для пользователя facebook ид, но я не думаю, что это такое ...

Вот код javascript на моей странице входа.

script(src='//connect.facebook.net/en_US/all.js') 
div#fb-root 
    script. 
      window.fbAsyncInit = function() { 
       // init the FB JS SDK 
      FB.init({ 
       appId: 'blank', // App ID from the app dashboard 
       //channelUrl:'//WWW.YOUR_DOMAIN.COM/channel.html', // Channel file for x-domain comms 
       status  : true,         // Check Facebook Login status 
       xfbml  : true,         // Look for social plugins on the page 
       cookie: true 
      }); 



     }; 



     (function(d){ 
      var js, id = 'facebook-jssdk', ref = d.getElementsByTagName('script')[0]; 
      if (d.getElementById(id)) {return;} 
      js = d.createElement('script'); js.id = id; js.async = true; 
      js.src = "//connect.facebook.net/en_US/all.js"; 
      ref.parentNode.insertBefore(js, ref); 
     }(document)); 


     function authUser() { 
       FB.login(checkLoginStatus, {scope:'email, user_likes'}); 

       function checkLoginStatus(response) { 
        if(response && response.status == 'connected') { 
         alert('User is authorized'); 
         document.getElementById('loginButton').style.display = 'none'; 
         console.log('Access Token: ' + response.authResponse.accessToken); 
         var uid = response.authoResponse.userID; 
         var accessToken = response.authoResponse.accessToken; 
      testAPI(); 
         getFBData(); 
        } else { 
         alert('User is not authorized'); 
         document.getElementById('loginButton').style.display = 'block'; 
        } 
       } 


      } 


     function testAPI() { 
      console.log('Welcome! Fetching your information.... '); 
      FB.api('/me', function(response) { 
       console.log('Good to see you, ' + response.name + '.' + response.id); 
      }); 
     }; 

     function getFBData() { 
      FB.api('/me', function(data){ 
       alert(data.first_name + data.last_name + data.id); 
      }) 
     }; 
     function fbLogout() { 
      FB.logout(function (response) { 
       //window.location.replace("http://stackoverflow.com"); is a redirect 
       window.location.reload(); 
      }); 
     } 




    div.centerContent 
      form(method="POST", action="/login") 
       fieldset 
        legend Login 
        input(type="email", name="email", placeholder="Email", maxlength="20", value= "") 
        br 
        input(type="password", name="password", id="password", placeholder="Password", maxlength="20", value= "") 
        br 
        input.btn.btn-primary(type="submit", name="login", value="Login") 
        a(href="/") 
         button.btn(type="button") Cancel 
      <fb:login-button show-faces="true" width="200" max-rows="1"></fb:login-button> 
      button#fbLogout(type="button", onclick="fbLogout()") Logout of FB 
      button#fbLogin(type="button", onclick="authUser()") Login to FB 

Это нефрит, но его следует читать.

Любой помощь или направление о том, как на самом деле захватить данные пользователя (в частности Ищу профильное изображение, маркер доступа, идентификатор пользователя, первое и фамилию)

Спасибо.

EDIT:

Я использую Node.js и MongoDB на внутреннем интерфейсе

+0

Я не знаю, откуда вы взяли этот код, но я бы порекомендовал вам следовать инструкциям из разработчиков сайта - [Начало работы] (https: // разработчики .facebook.com/документы/facebook-Логин/получение стартер-Web /). Ваш ответ начинается с части «Добавить код входа» в ссылку. –

+0

Я не уверен, что вы имеете в виду ... это от начала, а некоторые из моих собственных настроек и кода добавлены, чтобы получить информацию, которую я хочу? – Lion789

ответ

3

Есть много проблем с вашим кодом. Самый большой из них, я думаю, что вы не используете ответ в обратном вызове! Другие - это просто неправильное написание переменных типа authResponse и authoResponse.

Попробуйте это:

function authUser() { 
      FB.login(checkLoginStatus, {scope:'email, user_likes'}); 

      function checkLoginStatus(response) { 
       if(!response || response.status !== 'connected') { 
        alert('User is not authorized'); 
        document.getElementById('loginButton').style.display = 'block'; 
       } else { 
        alert('User is authorized'); 
        document.getElementById('loginButton').style.display = 'none'; 
        console.log('Access Token: ' + response.authResponse.accessToken); 

        //This has to be in your callback! 
        var uid = response.authResponse.userID; 
        var accessToken = response.authResponse.accessToken; 

        testAPI(); 
        getFBData(); 
       } 
      } 
     } 


    function testAPI() { 
     console.log('Welcome! Fetching your information.... '); 
     FB.api('/me', function(response) { 
      console.log('Good to see you, ' + response.name + '.' + response.id); 
     }); 
    }; 

    function getFBData() { 
     FB.api('/me', function(data){ 
      alert(data.first_name + data.last_name + data.id); 
     }) 
    }; 
    function fbLogout() { 
     FB.logout(function (response) { 
      //window.location.replace("http://stackoverflow.com"); is a redirect 
      window.location.reload(); 
     }); 
    } 
+0

Спасибо за эти находки, должен ли я добавлять функцию после области для обратного вызова, а затем бросать ее выше testAPI и т. Д.? Кроме того, знаете ли вы, как я буду ссылаться на файл с серверной стороны, это req.body.something или я полагаю, что я должен опубликовать JSON? – Lion789

+0

Почему вы хотите другой обратный вызов? обратный вызов для FB.Login - checkLoginStatus, затем внутри этой функции вы можете делать то, что хотите, и запускать любые другие функции, которые вы хотите. Для серверной части вам необходимо отправить данные от клиента к конечной точке вашего сервера, а с помощью промежуточного программного обеспечения express и bodyparser у вас будет доступ к req.body –

+0

О, тогда я думаю, что я смутил вас, что это должно быть в вашем обратном вызове ? вы просто имели в виду в качестве аргументов? Потому что мне нужно как-то получить accessToken, чтобы делать запросы от имени пользователя. – Lion789

1

Первое, что я могу сказать из вашего кода является то, что ваша функция Логин должен быть асинхронным так:

FB.login(function(response) { 
    var uid = response.authoResponse.userID; 
    var accessToken = response.authoResponse.accessToken; 
}, {scope: 'email,user_likes'}); 

Кроме того, при упоминании о том, что вы хотите передать информацию пользователя FB на сервер, когда пользователь входит в систему на стороне клиента, информация на стороне сервера уже должна быть доступна через FB PHP SDK. Документацию для этого можно найти здесь: https://developers.facebook.com/docs/reference/php/

Пример PHP вызова, который обеспечит вам информацию пользователя на сервере:

$me = $Facebook->api('/me'); 
+1

Извините, не уточнил, но я использую Node.js на бэкэнд, и я вызываю функцию вверху для getFBData, но я не знаю, как ее называть, и если я улавливаю ее неправильно ... – Lion789

+0

Кроме того, я был вызывая checkLoginStatus arg, поэтому я могу проверить, не был ли пользователь уже зарегистрирован или нет ... – Lion789

+1

А, ок. Для начала я попробую переместить функции authUser() и checkLoginStatus() вне функции window.fbAsyncInit, чтобы узнать, исправляет ли проблема с вашей учетной записью. Я думаю, что функция window.fbAsyncInit предназначена только для включения вызова init() и прослушивателей событий. –

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