entre Desarrolladores

Recibe ayuda de expertos

Registrate y pregunta

Es gratis y fácil

Recibe respuestas

Respuestas, votos y comentarios

Vota y selecciona respuestas

Recibe puntos, vota y da la solución

Pregunta

2votos

Cuando se conectan con facebook a la aplicación, sigue recargando la página

Estoy algo confuso con el login de usuario de Facebook, y me funciona todo correctamente, excepto que cuando entra en la página, me sigue recargando la web una y otra vez.
No sé si es por FB.api() que no para de hacer llamadas ajax al servidor, o no lo sé estoy confuso.

Os dejo el código:

<script>
                            // Constantes de control de estado en Facebook
                            // https://developers.facebook.com/docs/reference/javascript/FB.getLoginStatus/
                            var APP_ID = '701061543250644';
                            var CHANNEL_URL= 'http://xxxxxxxxxxxxxxxxxx/chatiic/php/facebook/channel.php';
                            var STATUS_CONNECTED = 'connected';
                            var STATUS_NOT_AUTHORIZED = 'not_authorized';
                            var STATUS_UNKNOWN = 'unknown';
                            var PERMISSIONS  = {scope: 'email, user_about_me, user_birthday, publish_stream'};

                            var uid;
                            var accessToken;
                            var isLogginProcess = false;

                            function writeOutput(msg)
                            {
                                var $output = $('.output');
                                var content = $output.html();
                                $('.output').html(content + msg + '<br/>');
                            }       

                            function doLogin (ev)
                            {
                                //writeOutput('Solicitando login...');
                                isLogginProcess = true;
                                FB.login(controlarStatus, PERMISSIONS);
                            }

                            function doAuthorize (ev)
                            {
                                //writeOutput('Solicitando autorización...');
                                isLogginProcess = true;
                                FB.login(controlarStatus, PERMISSIONS);
                            }

                            function doLogout (ev)
                            {
                                //writeOutput('Solicitando logout...');
                                FB.logout(controlarStatus);
                            }

                            function authResponseChange (respuesta)
                            {
                                //writeOutput('Evento AuthResponseChange: '+respuesta.status);
                                controlarStatus(respuesta);
                            }

                            function statusChange (respuesta)
                            {
                                //writeOutput('Evento StatusChange: '+respuesta.status);
                                controlarStatus(respuesta);
                            }

                            function controlarStatus(respuesta)
                            {
                                if (respuesta.authResponse)
                                {   
                                    //writeOutput('Control status (con respuesta): '+respuesta.status);
                                    if (respuesta.status === STATUS_CONNECTED) 
                                    {
                                        /* 
                                            El usuario está logueado y además ha sido autenticado por
                                            la aplicación. En este caso, respuesta.authResponse contiene el ID 
                                            del usuario, un token de acceso válido, una petición firmada y el momento
                                            en que el token de acceso y la petición firmada caducarán
                                        */

                                        // Podriamos guardar datos como el userID y el token de acceso
                                        uid = respuesta.authResponse.userID;
                                        accessToken = respuesta.authResponse.accessToken;

                                        $('#logout').show();
                                        $('#authorize').hide();
                                        $('#login_facebook').hide();

                                        FB.api('/me', function(response) {
                                          var dataFacebook = "username="+response.name+"&token="+accessToken+"&email="+response.email+"&nombre="+response.first_name+"&sexo="+response.gender+"&nacimiento="+response.user_birthday;
                                          $.ajax({
                                            type: "POST",
                                            url: "php/registro-facebook.php", //Mando a ajaxdatos.php
                                            data: dataFacebook, //La cedula
                                            success: function(data) {
                                                if(data == 'registroOK'){ //Si ajaxdatos.php me devuelve algo
                                                    $('#abrirAcceder').modal('hide'); //oculto el modal de cedula
                                                    $('#error_acceso').hide(); //oculto el modal de cedula
                                                    urlWeb = "http://xxxxxxxxxxxxxxxxxxxxx";
                                                    $(location).attr('href',urlWeb);
                                                }else{ //si no me devuelve nada el ajaxdatos.php (porque no valido los datos)
                                                    $('#abrirAcceder').modal('hide'); //oculto el modal de cedula
                                                    $('#error_acceso').hide(); //oculto el modal de cedula
                                                    urlWeb = "xxxxxxxxxxxxxxxxxxxxx";
                                                    $(location).attr('href',urlWeb);
                                                }
                                            }
                                          });
                                        });
                                    } 
                                    else if (respuesta.status === STATUS_NOT_AUTHORIZED) 
                                    {
                                        /*
                                            El usuario está logueado en Facebook, pero no ha sido autenticado
                                            por la aplicación. Se debería permitir mediante un botón o enlace (si se
                                            hace de forma automática, el cuadro de diálogo puede ser interpretado como 
                                            un popup a bloquear).
                                        */
                                        $('#authorize').show();
                                        $('#logout').show();
                                        $('#login_facebook').hide();
                                    } 
                                    else 
                                    {
                                        // El usuario no está logueado en Facebook
                                        $('#login_facebook').show();
                                        $('#authorize').hide();
                                        $('#logout').hide();
                                    }
                                }
                                else
                                {
                                    //writeOutput('Control Status (sin respuesta): '+respuesta.status);

                                    if (isLogginProcess)
                                    {
                                        // Si el usuario viene de un proceso de login, es posible que 
                                        // haya dado a cancelar en la ventana, por lo que internamente
                                        // solicitamos un nuevo control de estado del usuario
                                        // El parámetro true es fundamental para que la petición no se
                                        // cachee, y por tanto obtengamos el estado real
                                        isLogginProcess = false;
                                        FB.getLoginStatus(controlarStatus, true);
                                    }

                                    if (respuesta.status === STATUS_NOT_AUTHORIZED) 
                                    {                   
                                        $('#authorize').show();
                                        $('#login_facebook').hide();
                                        $('#logout').hide();
                                    }
                                    else 
                                    {
                                        $('#login_facebook').show();
                                        $('#authorize').hide();                 
                                        $('#logout').hide();
                                    }
                                }

                                //writeOutput('----------------------------------');
                            }

                            function init()
                            {
                                // FB.Event.subscribe('auth.login', controlarStatus);
                                // FB.Event.subscribe('auth.statusChange', statusChange);
                                FB.Event.subscribe('auth.authResponseChange', authResponseChange);

                                FB.getLoginStatus(controlarStatus, true);

                                $('#login_facebook').on('click', doLogin);
                                $('#authorize').on('click', doAuthorize);
                                $('#logout').on('click', doLogout);
                            }

                            /*
                            ** Versión de uso convencional
                            ** que no dependiera de jQuery
                            */
                            window.fbAsyncInit = function() {
                                // Inicialización del SDK JavaScript para Facebook
                                FB.init({
                                  appId     : APP_ID,       // App ID para conexión con Facebook
                                  channelUrl: CHANNEL_URL,  // Ruta al fichero channel para cross-domain
                                  status    : false,        // Comprobar el estado de login de inicio
                                  xfbml     : true          // true para compatibilidad con social plugins
                                });

                                // Aquí, ya podemos inicializar nuestros procesos
                                init();                                 
                            }; 

                            // Carga del SDK de forma asíncrona
                            (function(d, s, id) {
                                var js, fjs = d.getElementsByTagName(s)[0];
                                if (d.getElementById(id)) {return;}
                                js = d.createElement(s); js.id = id;
                                js.src = "//connect.facebook.net/es_ES/all.js";
                                fjs.parentNode.insertBefore(js, fjs);
                            }(document, 'script', 'facebook-jssdk')); // */
                            </script>

0voto

danielreales7 comentado

registro-facebook contiene:

    <?php
    date_default_timezone_set("Europe/Madrid"); 
    include('conexion.php');
    require 'encriptacion_password/PasswordHash.php';

    $username = $_POST["nombre"];
    $password = $_POST["token"];
    $email = $_POST["email"];
    $nombre_completo = $_POST["username"];
    $sexo = $_POST["sexo"];
    $fecha_alta = date('Y-m-d H:i:s');
    $nacimiento = $_POST["nacimiento"];

    $t_hasher = new PasswordHash(8, TRUE);
    $hash = $t_hasher->HashPassword($passwd);

    $sql = "SELECT * FROM T_USUARIOS WHERE EMAIL = '$email'";
    $resultado = mysqli_query($conexion, $sql);
    $row = mysqli_fetch_array($resultado);

    if($row){
        session_start();
        $_SESSION['id_usuario'] = $row["ID"];
        $_SESSION['nombre_completo'] = $row["NOMBRE_COMPLETO"];
        $_SESSION['email_user'] = $row["EMAIL"]; 
        $_SESSION['nacimiento'] = $row["FECHA_NACIMIENTO"];
        $_SESSION['sexo'] = $row["SEXO"];
        $_SESSION['buscando'] = $row["BUSCANDO"];
        $_SESSION['estado_civil'] = $row["ESTADO_CIVIL"];
        $_SESSION['ciudad'] = $row["CIUDAD"];
        $_SESSION['provincia'] = $row["ID_PROVINCIA"];
        $_SESSION['pais'] = $row["ID_PAIS"];
        $_SESSION['foto_perfil'] = $row["FOTO_PERFIL"];
        $_SESSION['me_apasiona'] = $row["ME_APASIONA"];
        $_SESSION['busco_en_persona'] = $row["BUSCO_EN_PERSONA"];
        $_SESSION['descripcion'] = $row["DESCRIPCION"];
        $_SESSION['sobre_mi'] = $row["SOBRE_MI"];
        echo "correcto";
    }else{
        $sql2 = "INSERT INTO T_USUARIOS (USUARIO,PASSWD,USER_NICENAME,EMAIL,F_ALTA,USER_ACTIVATION_KEY,ESTADO,NOMBRE_COMPLETO,F_BAJA,F_MODIF,FECHA_NACIMIENTO,SEXO,BUSCANDO,ID_PROVINCIA,ID_PAIS,ESTADO_CIVIL,CIUDAD,ME_APASIONA,BUSCO_EN_PERSONA,DESCRIPCION) VALUES ('$username','$hash','$username','$email','$fecha_alta',null,0,'$nombre_completo',null,'$fecha_alta','$nacimiento','$sexo',null,0,0,null,0,null,null,null)";
        $resultado2 = mysqli_query($conexion,$sql2);
        echo "registerOK";
    }
?>

Por favor, accede o regístrate para responder a esta pregunta.

Otras Preguntas y Respuestas


...

Bienvenido a entre Desarrolladores, donde puedes realizar preguntas y recibir respuestas de otros miembros de la comunidad.

Conecta