2017-10-16 14 views
0

私はFacebook SDK for JavaScriptをPython Flask Webアプリケーションに統合しています。ログインしたユーザーのFacebook idサーバー側にアクセスする必要があります。Pythonフラスコ:FB API呼び出しからのバックエンドへの応答

@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')) 

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

そしてフラスコsessionオブジェクトにそのIDを記憶:

私の現在のアプローチは、ユーザがログインをするときのIDを格納する隠し入力を含むフォームを構築し、それを提出することです

ここではより良いアプローチがありますか、またはこのデータをクライアントからサーバー側に渡す唯一の方法を隠しフォームに送信していますか?

FB.init()メソッドには、cookieという名前のパラメータがあります。これは、「セッション用のCookieが作成されているかどうかを確認します。有効にすると、サーバー側のコードでアクセスできます"私はかなりフラスコのセッションオブジェクトはクライアント側(正当な理由)を変更することはできませんが、おそらくこの別のクッキーは、私のpythonコードでサーバー側を評価することができますか?

+0

これは役に立ちましたかもしれない[Facebook SDK for Python library](https://facebook-sdk.readthedocs.io/en/latest/index.html)です。 –

答えて

0

ログイン/ログアウト後にFlaskアプリにGETまたはPOSTリクエストを使用することを決定しました。フォームの作成は完全に不要で過度に複雑でした。

0

ユーザーのfb_idをセッションCookieとして設定し、サーバー側にアクセスできます。 fb_id = request.cookies.get('COOKIE_NAME')

+0

私は 'print(request .cookies) 'と私はフラスコのセッションクッキーを見るだけです –

+0

クッキーはあなたがクライアント側で作成したものですか?リクエストがサーバーに送信された時点でCookieがクライアント側で正常に作成されていれば、request.cookies.getを使用してアクセスできます。 –

+0

フラスコセッションクッキーが表示され、Facebookは約12種類のCookieを作成します。 FBクッキーのどれもrequest.cookiesで評価できません。これは奇妙です –

関連する問題