4

我使用 Sinatra 和Rest-Graph gem构建了一个 Facebook 应用程序。现在我想将该应用程序作为 iframe 选项卡嵌入到 Facebook Page中。

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

Rest-Graph gem在其 Github 页面上声明了以下功能:

用于提取 access_token 并检查 cookies/signed_request 中的 sig 的实用程序

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

4

2 回答 2

7

几乎所有可用的 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"])

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

于 2011-04-27T14:49:53.547 回答
0

我刚刚从Rest-Graph gem 的开发者"cardinalblue" 那里得到了这个问题的回复。这个小例子正是我想要的:

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 Pages使用 POST 请求而不是 GET 获取您的页面。

于 2011-05-02T20:10:55.947 回答