2011-11-19 5 views
1

J'ai un site Web qui utilise d'abord l'API Javascript de Facebook pour enregistrer un utilisateur. Cependant, lorsqu'un utilisateur envoie une requête xmlhttp à l'un de mes scripts PHP, je voudrais vérifier à nouveau pour voir si l'utilisateur est connecté via PHP (pour des raisons de sécurité).Authentification Facebook PHP & AJAX

J'avais un système en état de marche mais après un changement de site, il semble y avoir un bug. Quand j'écho $ html dans le script facebook.php je reçois cette erreur: {"error":{"message":"An active access token must be used to query information about the current user.","type":"OAuthException"}}.

/* request.js */ 
var postData = "id=" + id; 

sendRequest('assets/php/believe.php',function(req) { 
    console.log(req.responseText); 
},postData); 

/* believe.php */ 
<?php 
include("facebook.php"); 
$id = intval($_POST["id"]); 

if($id == '') { 
    //Stuff 
} else { 
    if($cookie) { 
    echo "hey"; 
    } 
} 
?> 

/* facebook.php */ 
<?php 
define('YOUR_APP_ID', 'xxxxxx'); 
define('YOUR_APP_SECRET', 'xxxxxxxxxxxx'); 

function curl_get_contents($url){ 
    $curl = curl_init(); 
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); 
    curl_setopt($curl, CURLOPT_URL, $url);  
    $html = curl_exec($curl); 
    curl_close($curl); 
    echo "$html"; 
    return $html; 
} 

function get_facebook_cookie($app_id, $app_secret){ 
    $args = array(); 
    parse_str(trim($_COOKIE['fbs_' . $app_id], '\\"'), $args); 
    ksort($args); 
    $payload = ''; 
    foreach ($args as $key => $value){ 
    if ($key != 'sig'){ 
     $payload .= $key . '=' . $value; 
    } 
    } 
    if (md5($payload . $app_secret) != $args['sig']){ 
    return null; 
    } 
    return $args; 
} 

$cookie = get_facebook_cookie(YOUR_APP_ID, YOUR_APP_SECRET); 

$user = json_decode(curl_get_contents(
    'https://graph.facebook.com/me?access_token=' . 
    $cookie['access_token'])); 
?> 

Répondre

0

Je pense que votre code est correct. Le jeton d'accès utilisateur a expiré. Si l'utilisateur le renouvelle, le code fonctionnera. Assurez-vous d'avoir un jeton valide dans le cookie