【问题标题】:Fetching signed_request in a Facebook App with Ruby/Sinatra and the Rest-Graph gem使用 Ruby/Sinatra 和 Rest-Graph gem 在 Facebook 应用程序中获取 signed_request
【发布时间】:2011-08-05 11:18:12
【问题描述】:

我使用 Sinatra 和 Rest-Graph gem 构建了一个 Facebook 应用程序。现在我想embed the app as an iframe tab in a Facebook Page

为此,我需要从 Facebook 发送到我的应用程序的signed_request 中获取数据。

Rest-Graph gem 声明了以下功能on its Github page

提取 access_token 的实用程序和 在 cookies/signed_request 中检查 sig

我找不到任何有关如何使用此“实用程序”的文档。你能给我一些文档,甚至更好,给我一个例子来说明它是如何与 Ruby/Sinatra 一起使用的吗?

【问题讨论】:

    标签: ruby facebook-graph-api sinatra facebook-iframe facebook-page


    【解决方案1】:

    几乎所有可用的 Graph API 库都以类似的方式处理 signed_request。 Rest-Graph 有一个可以在 Sinatra 中调用的 parse_signed_request 方法 (Rest-Graph/lib/core.rb)。

    我正在将考拉与 Sinatra 一起用于此,它的工作原理与宣传的一样:

    oauth = Koala::Facebook::OAuth.new(APP_ID, APP_CODE)
    signed_request = oauth.parse_signed_request(params["signed_request"])
    

    您会获取 Facebook 发布的 JSON 对象的哈希值:

    {
    "algorithm"=>"HMAC-SHA256",
    "issued_at"=>1303883452, 
    "user"=> 
    {
    "country"=>"us",
    "locale"=>"en_US"
    },
    "user_id"=>"100002364226618"
    }
    

    rest-graph 也很容易。刚刚在 Sinatra 应用程序中对此进行了测试。完美运行:

    rg = RestGraph.new( :app_id => APP_ID, :secret => APP_SECRET)
    parsed_request = rg.parse_signed_request!(params["signed_request"])
    

    让我知道这是否不适合你。

    【讨论】:

    • 刚刚看到您编辑了代码。它现在反映了我今天从 cardinalblue 那里得到的解决方案。无论如何,因为你是第一个回答我的问题的人,我不能收回那份赏金:这是你的。 :)
    【解决方案2】:

    我刚收到一个response to this question from "cardinalblue",它是 Rest-Graph gem 的开发者。这个小例子正是我想要的:

    require 'sinatra'
    require 'rest-graph'
    
    app_id = '123'
    secret = 'abc'
    config = {:app_id => app_id,
              :secret => secret}
    
    post '/' do
      rg = RestGraph.new(config)
      rg.parse_signed_request!(params['signed_request'])
      "#{rg.get('me').inspect.gsub('<', '&lt;')}\n"
    end
    
    run Sinatra::Application
    

    旁注:如果您正在构建类似的东西,请注意post '/' do。 Facebook 页面获取您的页面 using a POST request 而不是 GET。

    【讨论】:

    • 是的——我在我的应用程序中使用了 POST;我猜我认为任何想要解析 signed_request 的人都会这样做。 :) 干杯!
    • 我猜你是对的。我刚刚添加了那行,因为我花了一些时间才得到它,因为我的应用程序之前没有在 FB 画布中运行(这也是我寻找这个“signed_request”东西的原因;-))。
    • FWIW,Facebook 也使用 signed_request 取消授权 URL。正是您现在成功解析后可能想要实现的东西。
    猜你喜欢
    • 2012-01-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-13
    • 1970-01-01
    • 1970-01-01
    • 2013-07-01
    相关资源
    最近更新 更多