我已经在我的网站上实现了Facebook登录,方法是从Facebook Developers网站复制JSON代码。我已经定制了该代码,添加了一个调用PHP文件的Ajax,其中包含一些函数,用于将Facebook返回的数据插入到我们的数据库中。
当用户点击"登录Facebook"按钮,一个名为 facebookLogin()的函数运行。在该函数内部,我有调用PHP代码的Ajax。除非我手动刷新页面,否则数据不会插入数据库。我试图用JavaScript函数自动刷新它,但它没有用。我已经搜索了一个解决方案,以避免手动刷新,但没有成功。
我在这里粘贴代码。这是具有所述功能的代码的摘录。
function facebookLogin() { // función que devuelve datos de usuarios
console.log('Welcome! Fetching your information.... ');
FB.api('/me?fields=name,email', function(response) {
var nombreUsuario = JSON.stringify(response.name);
nombreUsuario = nombreUsuario.replace(/\"/g, "");
//document.getElementById("nombreUsuario").innerHTML = nombreUsuario;
var emailUsuario = JSON.stringify(response.email);
emailUsuario = emailUsuario.replace(/\"/g, "");
var idFacebook = JSON.stringify(response.id);
idFacebook = idFacebook.replace(/\"/g, "");
var fotoPerfil = 'http://graph.facebook.com/' + idFacebook + '/picture?type=large';
//document.getElementById("fotoPerfilUsuario").src = fotoPerfil;
//me Se va a la api de Facebook, y devuelve los valores que el usuario aprueba.
// En nuestro caso, los datos que usamos son los siguientes:
//name Devuelve el nombre.
//email Devuelve el email del usuario.
//picture Devuelve la foto de perfil del usuario.
// ---------- EMPIEZA FUNCIÓN AJAX ---------- //
$.ajax({
type: "POST",
url: "/users/functions/pasardatosfb.php",
async: false,
data: { "nombreUsuario" : nombreUsuario, "emailUsuario" : emailUsuario, "fotoPerfil" : fotoPerfil, "idFacebook" : idFacebook, "action" : "enviarDatosFb" },
cache: false,
success: function (data){
console.log(data); // Printa los datos que se pasan a Datos Login; es decir, los INSERT MySQLi.
}
});
});}
这就是上面代码中通过Ajax调用的PHP代码:
<?php
require($_SERVER['DOCUMENT_ROOT'].'/config/session_start.php'); // Incluimos el Session start.
if ($_POST['action'] == "enviarDatosFb"){
$idFacebook = $_POST["idFacebook"];
$nickUsuario = $_POST["nombreUsuario"];
$emailUsuario = $_POST["emailUsuario"];
$fotoPerfil = $_POST["fotoPerfil"];
date_default_timezone_set("Europe/Madrid");
$fechaRegistroUsuario = strftime( "%Y-%m-%d-%H-%M-%S", time() );
$idPermisosUsuario = "1";
$totalMonedasUsuario = "1001";
$idEstadoCuenta = "1";
$sql = "
INSERT INTO dtUsuariosDAG (nickUsuario, emailUsuario, fechaRegistroUsuario, idPermisosUsuario, totalMonedasUsuario, idEstadoCuenta)
VALUES ('$nickUsuario', '$emailUsuario', '$fechaRegistroUsuario', '$idPermisosUsuario', '$totalMonedasUsuario', '$idEstadoCuenta')
";
if ($connection->query($sql) === TRUE) {
echo "New record created successfully";
} else {
echo "Error: " . $sql . "<br>" . $connection->error;
}
$sql2 = "
SELECT idUsuario FROM dtUsuariosDAG
ORDER BY idUsuario DESC LIMIT 1
";
$result = $connection->query($sql2);
if ($result->num_rows > 0) {
while($row = $result->fetch_assoc()) {
$idUsuario = $row['idUsuario'];
}
}
$sql3 = "
INSERT INTO dtInformacionUsuarios (idUsuario, fotoUsuario)
VALUES ('$idUsuario', '$fotoPerfil')
";
if ($connection->query($sql3) === TRUE) {
echo "New record created successfully";
} else {
echo "Error: " . $sql3 . "<br>" . $connection->error;
}
$sql4 = "
INSERT INTO dtLoginRedesSociales (idUsuario, idRedSocial, tipoRedSocial)
VALUES ('$idUsuario', '$idFacebook', '1')
";
if ($connection->query($sql4) === TRUE) {
echo "New record created successfully";
} else {
echo "Error: " . $sql4 . "<br>" . $connection->error;
}
//TOCA AQUI
$sqlHistorialBonus = "SELECT fechaSuceso FROM dtHistorialMonedas
WHERE idUsuario=$idUsuario AND idMotivo=5 ORDER BY fechaSuceso DESC
LIMIT 1";
$resultadoHistorialBonus = $connection->query($sqlHistorialBonus);
$rowBonus = $resultadoHistorialBonus->fetch_assoc();
$fechaUltimoBonus = date('d-m-Y', strtotime($rowBonus['fechaSuceso']));
$_SESSION['fechaUltimoBonus'] = $fechaUltimoBonus;
$_SESSION["nickUsuario"] = $nickUsuario;
$_SESSION["email"] = $emailUsuario;
$_SESSION["idFacebook"] = $idFacebook;
$_SESSION['idPermisosUsuario'] = $idPermisosUsuario;
$_SESSION['idUsuario'] = $idUsuario;
mysqli_close($connection);
}?>
编辑:我在该按钮中调用了函数facebookLogin:
<fb:login-button scope="public_profile,email" onlogin="checkLoginState()" id="loginFb"></fb:login-button>
checkLoginState()函数在facebookLogin中调用:
function checkLoginState() {
FB.getLoginStatus(function(response) {
statusChangeCallback(response);
facebookLogin();
location.reload();
});
}