Frage

Ich verwende das JavaScript -SDK "fb.ui" von Facebook, um einen OAuth -Dialog zu erzielen. Sobald Sie auf die Erlaubnis klicken, muss ich das Sitzungsobjekt erfassen, die Benutzer -ID extrahieren und in meinem Skript weiter verwenden. Aus irgendeinem Grund kann ich das nicht ordnungsgemäß funktionieren, ich werde immer wieder undefiniert, obwohl die Sitzung existiert.

<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>
War es hilfreich?

Lösung 4

Also habe ich das zum Laufen gebracht, wie ich möchte. Dies ist vielleicht nicht der beste Weg, aber nachdem ich viel herumgegraben und frustriert hatte, hoffe ich, dass dies jemandem mit der gleichen Frage helfen könnte, auf den richtigen Weg zu kommen.

JS Quelle:

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 Quelle:

//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;

Andere Tipps

Um die BenutzerID zu erhalten:

FB.getLoginStatus(function(response) {
  alert(response.authResponse.userID);
});

Wenn Sie sich von der Anmeldetaste von Facebook anmelden, speichert es Cookies in Ihrem System, das auch Ihr Zugriffstoken enthält, das ebenfalls eindeutig ist. Dass Cookies auch Ihre Facebook -ID enthält.

Überprüfen Sie Ihre Antwort. Ich wette, es sagt so etwas wie aus "display" must be one of "popup", "iframe" or "hidden". Anscheinend kann das OAuth -Dialog nicht mit der Standardanzeige "Seite" aufgerufen werden. Und display: 'iframe' erfordert, dass Sie ein Access_Token eingeben, weshalb Sie den OAuth -Dialogin erstmals aufrufen>: l.

Ich glaube nicht, dass FB.UI derzeit verwendet werden kann, um den OAuth -Dialog zu erhalten, es sei denn, Sie möchten ein Popup verwenden, das heutzutage fast jeder blockiert hat.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top