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>