1

J'ai créé une connexion basée sur javascript pour ma dernière application, et tout fonctionne bien. Le problème est que je veux stocker tous les utilisateurs dans une base de données, et je ne sais pas comment le faire de la façon Facebook. J'ai de très bonnes connaissances en php et sql, donc ce n'est pas un problème. J'ai juste besoin de quelques conseils sur la façon de stocker en toute sécurité les données.Comment me connecter avec javascript mais stocker userinfo avec php/mysql?

La procédure que je veux est ceci:

Connexion utilisateur avec javascript pop-up -> vérifier si facebook id existe dans le tableau mysql. sinon, sauf avec des informations supplémentaires -> utilisateur est connecté

+0

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

+0

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. –

+1

Sécurité dans quel sens? Ou: Que voulez-vous exactement protéger contre un utilisateur malveillant? – Alex

Répondre

1
<script type="text/javascript"> 
window.fbAsyncInit = function() { 
    FB.init({ 
     appId: 'YOUR_APP_ID', 
     status: true, 
     cookie: true, 
     oauth: true 
    }); 
    FB.Event.subscribe('auth.login', function(response) { 
     // response returns a JSON object containing data relevant to the logged in user. 
     userID = response.authResponse.userID; 

     // using jQuery to perform AJAX POST. 
     $.post('form_handler.php', {userID: userID}, function() { 
      // POST callback 
     }); 
    }); 
} 
</script> 

Votre fichier form_handler.php aurait besoin d'être mis en place pour aller chercher la variable userID de $ _POST. De là, vous pouvez utiliser SQL pour vérifier si l'utilisateur existe déjà, etc.

Si vous craignez que la variable JavaScript userID puisse être facilement modifiée, je suggère d'utiliser le SDK PHP dans le fichier form_handler.php pour récupérer le fichier. uid actuel. A l'intérieur de form_handler.php ici (sous la forme la plus basique) est ce que vous devez faire:

<?php 
require('facebook.php'); 
$facebook = new Facebook(array(
    'appId' => YOUR_APP_ID, 
    'secret' => YOUR_APP_SECRET 
)); 
// get the current logged in userID 
$user = $facebook->getUser(); 

// SQL queries (check if user exists, insert, etc.) 

?> 

Le code ci-dessus suppose que vous avez migré votre application OAuth 2.0.

+0

$ en javascript. Est-ce que ça veut dire jquery ??? –

+0

@kongaraju Oui, le $ est un raccourci pour jQuery. Donc dans cet exemple, il aurait aussi pu écrire jQuery.post ('form_handler.php, .. –

+0

merci beaucoup –

-1

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.

+0

C'est la technique que j'ai utilisée dans mon projet récent et ça marche bien. – KielSoft

Questions connexes