使用Ruby / Sinatra和Rest-Graph gem在Facebook App中获取signed_request

时间:2011-04-14 11:24:58

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

我使用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一起使用的例子?

2 个答案:

答案 0 :(得分:7)

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

我正在与Sinatra一起使用Koala,它的工作原理如下:

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"])

Lemme知道这是否对您不起作用。

答案 1 :(得分:0)

我刚刚得到了一个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。