Domanda

Sto usando Facebook Javascript SDK "FB.ui" per tirare su una finestra di dialogo OAuth. Una volta che si fa clic su permettete, ho bisogno di catturare l'oggetto di sessione, estrarre l'ID utente e utilizzarlo ulteriormente nel mio script. Per qualche motivo non riesco a ottenere questo funziona correttamente, continuo ad essere definito, anche se la sessione esiste.

<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>
È stato utile?

Soluzione 4

Così ho avuto questo lavoro come vorrei. Questo potrebbe non essere il modo migliore, ma dopo molto scavare intorno e frustrazione spero che questo potrebbe aiutare qualcuno con la stessa get domanda sulla strada giusta.

fonte 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
            }
        });
    }
});

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

Altri suggerimenti

Per ottenere l'userID:

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

Quando si accede dal pulsante di login di Facebook, allora esso memorizza i cookies nel vostro sistema che contiene il token di accesso che è anche unico. Che i cookie contiene anche il tuo ID Facebook.

Controlla la tua risposta. Scommetto che dice qualcosa come "display" must be one of "popup", "iframe" or "hidden". A quanto pare la finestra di dialogo OAuth non può essere chiamato con la visualizzazione di default "pagina". E display: 'iframe' richiede che si include un access_token, che è il motivo per cui si sta chiamando la finestra di dialogo OAuth, in primo luogo>:. L

Non credo FB.ui attualmente può essere utilizzato per ottenere la finestra di dialogo OAuth, a meno che non si desidera utilizzare un popup, che la maggior parte tutti ha bloccato al giorno d'oggi.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top