1

嘿,所以我很难理解如何从登录我的网站的用户那里检索数据,我目前正在使用 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

4

2 回答 2

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();
        });
    }
于 2013-08-22T16:49:10.003 回答
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');
于 2013-08-22T16:06:40.573 回答