Vous pouvez vérifier si l'utilisateur dispose d'un jeton d'accès valide, en d'autres termes, a été connecté à votre site à un moment donné. FB vous donne les données de session à l'extrémité avant pour l'obtenir comme ceci:
FB.getLoginStatus(function(response){
//send the response to the back end in a json string
});
puis validez sur l'arrière en utilisant une version modifiée de la validation de la signature de l'héritage. Ça semble fonctionner. S'il vous plaît laissez-moi savoir si quelque chose me manque. Il vous indique uniquement que l'ID utilisateur, le token d'accès correspond à votre site. Aucun appel de boucle nécessaire. Il ne vous dit pas si la session est actuellement valide, alors ne comptez pas dessus pour votre système bancaire ou quoi que ce soit.
function validateFB_sessionObj($sessionObj){//pass me the session data object
$sessionObj = $sessionObj->session;
global $fb;//pull in the secret fb keys
if (!is_object($sessionObj) || !isset($sessionObj->uid) || !isset($sessionObj->access_token) || !isset($sessionObj->sig)){
// warning("facebook session object is lacking something", $sessionObj);
return false;
}
$expectedSig = generateSig($sessionObj, $secret);
if ($sessionObj->sig = $expectedSig){
// status("fb signature looks good");
return true;
} else {
// warning("facebook signature looks wrong", $sessionObj);
return false;
}
}
function generateSig($params, $secret){
$string = $params->access_token . $params->uid . $secret;
return md5($string);
}
C'est fait avec une fenêtre contextuelle. Ce qui signifie que vous ne pouvez l'appeler qu'à partir d'une action de l'utilisateur comme un événement de clic, ou le navigateur va probablement le bloquer. – Paulpro
merci! J'ai une application Pyramid qui utilise facebook auth. Je comprends qu'il y a deux types d'utilisateurs de l'utilisateur Facebook: le côté client et le côté serveur. Je n'utilise actuellement que le côté client, car l'accès aux données de l'utilisateur dans js est seulement correct pour moi. Je pensais à la sécurité et je ne suis pas sûr que ce soit fort. Mon site contient un formulaire envoyé par un utilisateur connecté. Comme je n'ai aucun moyen de vérifier le statut de connexion sur le serveur, n'importe qui peut techniquement soumettre le formulaire, même sans être connecté - en manipulant simplement le js, correct? L'authentification côté serveur est-elle la seule façon d'y accéder? – Raiders
@Raiders Il serait également plus sûr de vérifier les serveurs. Je ne suis pas sûr comment vous feriez cela dans Pyramid, mais fondamentalement j'utilise ajax après 'FB.login()' et envoie le user_id et access_token au serveur. Ensuite, j'utilise cURL sur mon serveur pour envoyer une requête à 'https: //graph.facebook.com/me?access_token = 'access_token_from_ajax' et vérifier que l'id_utilisateur retourné correspond à mon id_utilisateur que j'ai reçu de l'ajax. – Paulpro