2017-10-16 25 views
0

我正在將Facebook SDK for JavaScript集成到我的Python Flask Web應用程序中。我希望能夠訪問登錄用戶的Facebook ID服務器端。python flask:將FB API調用的響應傳遞到後端

我目前的做法是建立一個形式含有一個隱藏的輸入,其存儲的ID,並將其提交時在用戶登錄:

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

該id然後存儲在燒瓶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')) 

在這裏有更好的方法還是提交一個隱藏的窗體是將這些數據從客戶端傳遞到服務器端的唯一方法?

只是一個想法......我注意到有一個在FB.init()方法的參數調用cookie這是一個描述爲,「Inidcates是否爲會話創建的cookie。如果啓用,它可以通過服務器端代碼訪問「。我很確定燒瓶會話對象不能被修改客戶端(正確如此),但也許這個單獨的cookie可以在我的python代碼服務器端進行評估?

+0

剛剛發現這個[Facebook的SDK的Python庫](https://facebook-sdk.readthedocs.io/en/latest/index.html),這可能會有所幫助 –

回答

0

決定在登錄/註銷後使用GET或POST請求到Flask應用程序。創建表單完全沒有必要,而且過於複雜。

0

您可以將用戶的fb_id設置爲會話cookie並訪問它在服務器端。這可以通過fb_id = request.cookies.get('COOKIE_NAME')

+0

我試着做一個'print(request .cookies)',我只看到燒瓶會話cookie –

+0

你在客戶端創建了哪些cookies?如果我的cookie已經在客戶端發送到服務器的請求成功創建,您將可以使用request.cookies.get –

+0

訪問它我看到了會話cookie,Facebook創建了大約12個不同的cookie 。沒有一個FB餅乾可以通過request.cookies評估,這很奇怪 –