5

我正在使用 Facebook 的 Javascript SDK“FB.ui”来打开 OAuth 对话框。单击允许后,我需要捕获会话对象,提取用户 ID 并在我的脚本中进一步使用它。出于某种原因,我无法使其正常工作,即使会话确实存在,我也一直未定义。

<script src="http://connect.facebook.net/en_US/all.js"></script>
<div id="fb-root"></div>
<script type="text/javascript">
FB.init({
    appId  : '***************',
    status : true,
    cookie : true,
    xfbml  : true
});
FB.getLoginStatus(function(response) {
    if (response.session) {
        //do something
    } else {
        FB.ui({
            method: 'oauth',
            display: 'page',
            scope: 'email',
            perms: 'email'
        },
        function(response) {
            alert(response.session.uid); //returns underfined
        });
    }
});
</script>
4

4 回答 4

2

要获取用户 ID:

FB.getLoginStatus(function(response) {
  alert(response.authResponse.userID);
});
于 2012-01-25T12:09:33.847 回答
1

当您从 facebook 的登录按钮登录时,它会将 cookie 存储在您的系统中,其中包含您的访问令牌,该令牌也是唯一的。该 cookie 还包含您的 facebook id。

于 2011-03-18T05:12:20.030 回答
0

检查您的回复。我敢打赌,它说的是"display" must be one of "popup", "iframe" or "hidden".显然不能使用默认的“页面”显示调用 oauth 对话框。并且display: 'iframe'要求您包含一个 access_token,这就是您首先调用 oauth 对话框的原因 >:l 。

我认为 FB.ui 目前不能用于获取 oauth 对话框,除非你想使用一个弹出窗口,现在大多数人都阻止了它。

于 2011-03-30T19:52:24.893 回答
0

所以我让它按照我的意愿工作。这可能不是最好的方法,但经过大量挖掘和挫折后,我希望这可以帮助有同样问题的人走上正轨。

JS 源码:

FB.getLoginStatus(function(response) {
    if (!response.session) {
        //initiate FB OAuth js popup dialog
        FB.ui({
            method: 'oauth',
            display: 'page',
            scope: 'email',
            perms: 'email'
        },
        function(response) {
            if (response.session) { //if permission Allowed
                var thesession = response.session;
                var thesession = eval('(' + thesession + ')'); //decode json
                //POSTing to local file get.user_graph.php, to fetch user info
                $.ajax({
                    type: "POST",
                    url: "get.user_graph.php",
                    data: "client_id=<?php echo $appId; ?>&client_secret=<?php echo $secret; ?>&sessions="+thesession.session_key+"&type=client_cred&uid="+thesession.uid,
                    dataType: "text",
                    success: function(user_graph){
                        var user_graph1 = eval('('+user_graph+')');
                        alert(user_graph1.name); //users name
                        alert(user_graph1.id); //users id
                        alert(user_graph1.email); //users email
                        alert(user_graph1.link); //users profile link
                    }
                });
            } else {
                //if permission Not Allowed
            }
        });
    }
});

get.user_graph.php 来源:

//exchange our session for an access_token
define('POSTURL', 'https://graph.facebook.com/oauth/exchange_sessions');
define('POSTVARS', 'client_id='.$_POST['client_id'].'&client_secret='.$_POST['client_secret'].'&sessions='.$_POST['sessions'].'&type=client_cred');
$curl_token = curl_init(POSTURL);
curl_setopt($curl_token, CURLOPT_POST,1);
curl_setopt($curl_token, CURLOPT_POSTFIELDS,POSTVARS);
curl_setopt($curl_token, CURLOPT_FOLLOWLOCATION,1);
curl_setopt($curl_token, CURLOPT_HEADER,0);
curl_setopt($curl_token, CURLOPT_RETURNTRANSFER,1);
$token = curl_exec($curl_token);

$token_decoded = json_decode($token,true);
//get the user graph (personal info)
$user_graph = file_get_contents("https://graph.facebook.com/".$_POST['uid']."?access_token=".$token_decoded[0]['access_token']);
echo $user_graph;
于 2011-04-07T13:33:11.300 回答