Après une connexion réussie avec Facebook JS Connectez-vous appeler cette fonction TestAPI()
yourJSfile.js
function testAPI() {
console.log('Welcome! Fetching your information.... ');
FB.api('/me', function(response) {
var json = JSON.stringify(response);
setCookie("fbresponse_"+response.id, json, 1);
facebook_response = response;
doLocalPosiive();
return;
for(var propt in response){
console.log(propt + ': ' + response[propt]);
}
});
}
function setCookie(c_name,value,exdays)
{
var exdate=new Date();
exdate.setDate(exdate.getDate() + exdays);
var c_value=encodeURIComponent(value) + ((exdays==null) ? "" : "; expires="+exdate.toUTCString());
document.cookie=c_name + "=" + c_value;
}
La fonction TestAPI convertit la réponse à la chaîne JSON et enregistrez-le cookie et sur votre page php vous pouvez récupérer le cookie et analyser le signed_request (et vérifier la demande signée avec votre app_secret valide que vous connaissez seul je suppose) et décoder la réponse JSONed, puis faire ce que vous voulez avec lui en toute sécurité dans votre php/mySQL.
thePHPfile.php
<?php
function getSignedRequest($app_id){
$signed_request = $_COOKIE["fbsr_{$app_id}"];
if($signed_request){
return $signed_request;
} else {
return false;
}
}
function parseSignedRequest($signed_request, $secret){
list($encoded_sig, $payload) = explode('.', $signed_request, 2);
//Decode the data
$sig = base64_url_decode($encoded_sig);
$data = json_decode(base64_url_decode($payload), true);
if(strtoupper($data['algorithm']) !== 'HMAC-SHA256'){
error_log("Unknown Algorithm. Expected HMAC-SHA256");
return null;
}
//Verify the signed_resquest
$expeted_sig = hash_hmac('sha256', $payload, $secret, $raw = true);
if($sig !== $expeted_sig){
error_log("Bad Signed JSON signature!");
return null;
}
return $data;
}
function base64_url_decode($str){
//$str .= str_repeat("=", (4-(strlen($str)%4)));
return base64_decode(strtr($str, '-_', '+/'));
}
// Please edit the next 2 lines
$app_id = "314xxxxxxxxx990";
$app_secret = "56b5eaxxxxxxxxxxxxxxxxxxx37c799";
if($fbsr = getSignedRequest($app_id)){
$response = parseSignedRequest($fbsr, $app_secret);
if($response['user_id']){
$js_response = $_COOKIE["fbresponse_{$response['user_id']}"];
$response_array = (json_decode($js_response, true));
//you can perform your database activities here now
}
}
?>
S'il vous plaît ne pas oublier de modifier votre APP_ID et APP_SECRET. J'espère que vous ou quelqu'un d'autre trouve cela utile.
Vous devez transmettre au script PHP certaines variables pour déterminer si l'utilisateur est dans la BD ou non, alors pourquoi ne pas simplement utiliser ces variables si vous avez besoin d'insérer un nouvel utilisateur? – Alex
L'idée que j'ai dans ma tête (et que je n'ai pas réussi à implémenter) est de passer l'identifiant facebook + un peu de hachage pour des raisons de sécurité via ajax, puis d'obtenir toutes les autres informations facebook du côté php. C'est la partie de la sécurité avec laquelle j'ai besoin d'aide. –
Sécurité dans quel sens? Ou: Que voulez-vous exactement protéger contre un utilisateur malveillant? – Alex