【问题标题】:Facebook app hosted on Google App Engine托管在 Google App Engine 上的 Facebook 应用
【发布时间】:2012-01-05 19:18:59
【问题描述】:

我是 Facebook 应用程序的新手,我已经在 GAE 上启动并运行了一个应用程序(使用 python)。我想将它与 Facebook 集成,这样我就可以访问一些用户的数据来帮助我个性化应用程序(喜欢的页面、兴趣、他们来自哪里等数据)。并分享应用程序的输出以供朋友查看。

我想我会选择https://developers.facebook.com/ 上的 Facebook 应用选项

我不知道从哪里开始,有一些教程(其中大部分都很旧,有些使用已弃用的脚本,所以有点担心),还有 FBML.. 我在想也许我可以通过仅使用 Facebook 的登录获得相同的数据,然后使用 FQL 访问这些数据。

而且我不知道我是否会被新的 https 限制所困扰(Facebook 表示自 2011 年 10 月起必须拥有 SSL 证书)。

所以底线..我从哪里开始?

【问题讨论】:

标签: facebook google-app-engine facebook-graph-api facebook-fql python-2.7


【解决方案1】:

我们开始吧:

从此链接下载:https://github.com/jgorset/facepy/tree/master/facepy

从下载中,您将拥有:
signed_request.py 来解析将由 facebook 在您的 画布网址:https://apps.facebook.com/myapp in POST 方法

graph_api.pygraphapihttps://developers.facebook.com/docs/reference/api/进行操作

注意:您将包含由 facebook js sdk 编写的 cookie 中的 access_token。
对于 fb js sdk,请参阅此答案:https://stackoverflow.com/a/8625873/492258 of javascript part

在您的索引页面中:

fb_app_secret='abcd...'
fb_app_id = 123345
def index(request):
    if request.POST:
        signed_request_param = request.POST.get('signed_request)        
        if signed_request_param:  
            #signed_request.py 
            signed_request_dic = signed_request.parse_signed_request(signed_request_param, fb_app_secret)
             if signed_request_dic:
                if signed_request_dic.has_key('user_id'): 
                    fb_uid = signed_request_dic['user_id']
                    #you got your man that is previously authorized your fb app : mypp

对于连续调用,您将使用我上面提到的 cookie:

def my_page(request):
    my_dict = None
    my_dict = signed_request.get_user_from_cookie(request.COOOKIES, fb_app_id, fb_app_secret)
    if my_dict:
        if my_dict.has_key('uid'):            
            fb_uid = my_dict['uid']
            fb_uid = int(fb_uid)
            #you got your registered user again.

对于注册,最简单的方法是从 fb js sdk 进行,我已经提到过

#finally for SSL, in your app.ymal:

- url: .*
  script: django_bootstrap.py
  secure: optional 

不要忘记为 Internet Explorer 设置 P3P,iramre cookie 问题:

def my_page(request):
    ....
    response = render_to_response('mypage.html', view_params )
    response["P3P"] = 'CP="IDC DSP COR ADM DEVi TAIi PSA PSD IVAi IVDi CONi HIS OUR IND CNT"'   
    return response 

【讨论】:

    【解决方案2】:

    您需要针对 Facebook 验证您的服务器应用程序 (GAE):您需要实现 server-side authentication flow

    有关示例实现,请参阅 LeanEngine(开源):server auth classes

    一旦您通过身份验证并获得用户 FB 身份验证令牌,您就可以使用FB Graph API 获取各种数据。

    【讨论】:

      【解决方案3】:
      1. 为您的 Web 服务器购买 SSL 证书,这样您就可以遵守新规则。
      2. 创建/设置您的应用以获取您的应用 ID 和密码。
      3. 学习 Javascript SDK,以我的拙见,它是最容易实现的。
      4. 学习 Graph API 并了解对象及其属性以及它们的连接。
      5. 您可以在此处使用 JS SDK:https://developers.facebook.com/tools/console/ 和此处的图表:https://developers.facebook.com/tools/explorer
      6. 将代码缓慢地引入您的网络服务器上的页面。首先进行身份验证,然后继续获取基本用户信息。

      【讨论】:

      • 1. AppEngine 不支持自定义服务器或客户端证书。
      • 2. Javascript 可用于 FB 客户端流认证。 OP 需要基于服务器的身份验证。
      • @Peter,你做的就是 AJAX 处理 JS SDK 获取的令牌。很抱歉,AppEngine 是如此受限,甚至不允许 SSL。我建议寻找一个新平台进行开发,因为 SSL 现在是 facebook 应用程序的半“要求”。
      • 那么,客户端通过JS从FB获取token,然后传递给GAE服务器?不好,因为在这种情况下,GAE 必须信任客户端。你永远不应该相信互联网上的客户。这就是 Facebook(以及一般的 OAuth)具有服务器端身份验证流程的原因。
      • 另外,GAE 有 SSL,只是没有自定义证书。每个 GAE 应用都有一个由谷歌提供的完全有效的服务器证书。
      猜你喜欢
      • 1970-01-01
      • 2020-09-05
      • 2021-02-25
      • 1970-01-01
      • 1970-01-01
      • 2010-10-19
      • 2019-03-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多