2017-10-16 3 views
0

J'intègre le Facebook SDK for JavaScript dans mon application Web Python Flask. Je veux la possibilité d'accéder à un utilisateur connecté id côté serveur.flacon python: passer la réponse d'un appel API FB au back-end

Mon approche actuelle est de construire une forme contenant une entrée cachée qui stocke l'identifiant et le soumettre lorsque l'utilisateur se connecte à:

<script> 
    function sendToBackEnd(){ 
    FB.getLoginStatus(function(response){ 
     if (response.status == 'connected'){ 
     $form = $('<form>', {'action': '/process_form', 'method': 'POST'}).appendTO('body'); 
     FB.api('/me', function(response){ 
      $('<input>', {'class': 'hidden', 'name': 'FB_id', 'value': response.id}).appendTo($form); 
     }); 
     } 
    }); 
    } 
</script> 

<div class="fb-login-button" onlogin="sendToBackEnd"></div> 

stocker ensuite cet identifiant dans l'objet flacon session:

@app.route('/process', methods=['GET', 'POST']) 
def process(): 
    session['FB_id'] = request.form['FB_id'] 
    print("User's Facebook id now accessible across all routes server-side!") 
    return redirect(url_for('index')) 

Y a-t-il une meilleure approche ici ou est-ce que soumettre une forme cachée est le seul moyen de transmettre ces données du client au serveur? Juste une pensée ... J'ai remarqué qu'il y a un paramètre dans la méthode FB.init() appelé cookie qui est décrit comme suit: «Inidate si un cookie est créé pour la session .Si activé, il est accessible par le code côté serveur " Je suis sûr que l'objet de session flask ne peut pas être modifié côté client (à juste titre), mais peut-être ce cookie séparé peut-il être évalué côté serveur dans mon code python?

+0

Je viens de trouver ce [Facebook SDK pour la bibliothèque Python] (https://facebook-sdk.readthedocs.io/en/latest/index.html), ce qui peut être utile –

Répondre

0

Décidé d'utiliser une demande GET ou POST à ​​l'application Flask après la connexion/déconnexion. Créer le formulaire était totalement inutile et trop compliqué.

0

Vous pouvez définir fb_id de l'utilisateur en tant que cookie de session et y accéder côté serveur. Cela peut être fait par fb_id = request.cookies.get('COOKIE_NAME')

+0

J'ai essayé de faire une impression (demande .cookies) 'et je ne vois que le cookie de la session flask –

+0

Quels cookies avez-vous créés du côté client? Si un cookie a été créé avec succès sur le client au moment où une requête est envoyée au serveur, vous pourrez y accéder en utilisant request.cookies.get –

+0

Je vois le cookie de session de flacon et Facebook crée environ une douzaine de cookies différents . Aucun cookie FB n'est évaluable via request.cookies, ce qui est étrange –