从facebook api为用户检索数据

时间:2013-08-22 16:00:28

标签: javascript html facebook facebook-graph-api

嘿所以我很难理解如何从登录我网站的用户检索数据,我目前正在使用javascript sdk,但我正在试图弄清楚如何正确地请求用户的数据然后如何将它发送到我的服务器端...我认为它可能是

req.body.id 

用于facebook用户ID,但我认为不是这样......

以下是我登录页面上的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

它在玉中但它应该是可读的。

有关如何实际获取用户信息的任何帮助或指示(特别是我正在寻找个人资料图片,访问令牌,用户ID,名字和姓氏)

感谢。

编辑:

我在后端使用node.js和mongodb

2 个答案:

答案 0 :(得分: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();
        });
    }

答案 1 :(得分: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');