Извлечение идентификатора пользователя из объекта сеанса Facebook Javascript SDK - PullRequest
5 голосов
/ 18 марта 2011

Я использую Javascript SDK Facebook "FB.ui", чтобы открыть диалог OAuth. Как только вы нажмете «разрешить», мне нужно захватить объект сеанса, извлечь идентификатор пользователя и использовать его далее в моем скрипте. По некоторым причинам я не могу заставить это работать должным образом, я продолжаю получать неопределенный, даже если сеанс существует.

<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 ]

2 голосов
/ 25 января 2012

Чтобы получить ИД пользователя:

FB.getLoginStatus(function(response) {
  alert(response.authResponse.userID);
});
1 голос
/ 18 марта 2011

Когда вы входите в систему с помощью кнопки входа в Facebook, в вашей системе сохраняются файлы cookie, содержащие ваш токен доступа, который также является уникальным. Эти файлы cookie также содержат ваш идентификатор Facebook

0 голосов
/ 07 апреля 2011

Так что я заставил это работать так, как мне хотелось бы.Возможно, это не лучший способ, но после долгих размышлений и разочарований я надеюсь, что это поможет кому-то с тем же вопросом встать на правильный путь..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;
0 голосов
/ 30 марта 2011

Проверьте ваш ответ. Бьюсь об заклад, он говорит что-то вроде "display" must be one of "popup", "iframe" or "hidden". Очевидно, что диалог oauth не может быть вызван с отображением по умолчанию "страница". И display: 'iframe' требует, чтобы вы включили access_token, поэтому вы в первую очередь вызываете диалог oauth>: l.

Я не думаю, что в настоящее время FB.ui можно использовать для вызова диалогового окна oauth, если только вы не хотите использовать всплывающее окно, которое большинство пользователей в настоящее время заблокировали.

...