2017-10-16 95 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评估,这很奇怪 –