Pregunta

Estoy usando JavaScript SDK "FB.UI" de Facebook para extraer un diálogo OAuth. Una vez que haga clic en Permitir, necesito capturar el objeto de sesión, extraer la ID de usuario y usarla más en mi script. Por alguna razón, no puedo hacer que esto funcione correctamente, sigo sin define, a pesar de que la sesión 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>
¿Fue útil?

Solución 4

Así que conseguí que esto funcionara como me gustaría. Esta puede no ser la mejor manera, pero después de mucho cavar y frustración, espero que esto pueda ayudar a alguien con la misma pregunta a ponerse en el camino correcto.

Fuente de 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 Fuente:

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

Otros consejos

Para obtener el ID de usuario:

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

Cuando inicia sesión desde el botón de inicio de sesión de Facebook, almacena cookies en su sistema que contiene su token de acceso que también es único. Esa cookies contiene su identificación de Facebook también.

Verifique su respuesta. Apuesto a que dice algo como "display" must be one of "popup", "iframe" or "hidden". Aparentemente, el cuadro de diálogo OAuth no se puede llamar con la pantalla "Página" predeterminada. Y display: 'iframe' requiere que incluya un access_token, por lo que está llamando al cuadro de diálogo Oauth en primer lugar>: l.

No creo que FB.UI se pueda usar actualmente para obtener el diálogo OAuth, a menos que desee usar una ventana emergente, que la mayoría de los que todos han bloqueado hoy en día.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top