Question

J'utilise Facebook Javascript SDK « FB.ui » pour tirer vers le haut une boîte de dialogue OAuth. Une fois que vous cliquez sur Autoriser, je dois saisir l'objet de la session, extraire l'ID utilisateur et de l'utiliser plus loin dans mon script. Pour une raison quelconque, je ne peux pas obtenir ce travail correctement, je continue à me Undefined, même si la session ne existe.

<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>
Était-ce utile?

La solution 4

Je suis arrivé au travail ce que je voudrais. Cela peut ne pas être la meilleure façon, mais après beaucoup de fouiller et de frustration j'espère que cela pourrait aider quelqu'un avec la même question get sur la bonne voie.

La source 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
            }
        });
    }
});

La source 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;

Autres conseils

Pour obtenir le code d'utilisateur:

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

Lorsque vous vous connectez de bouton de connexion de facebook il stocke les cookies dans votre système qui contient votre jeton d'accès qui est également unique. Que les cookies contient votre identifiant facebook aussi.

Vérifiez votre réponse. Je parie qu'il dit quelque chose comme "display" must be one of "popup", "iframe" or "hidden". Apparemment, le dialogue OAuth ne peut pas être appelé avec l'affichage par défaut « page ». Et display: 'iframe' exige que vous incluez un access_token, ce qui est la raison pour laquelle vous appelez la boîte de dialogue OAuth en premier lieu>:. L

Je ne pense pas FB.ui peut actuellement être utilisé pour obtenir la boîte de dialogue OAuth, sauf si vous voulez utiliser un popup qui presque tout le monde a bloqué aujourd'hui.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top