4

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

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

其余-图表宝石指出以下特点on its Github page

工具来提取和的access_token在饼干 检查SIG/signed_request

我找不到如何使用任何文件这个“效用”。你能指点我一些文档还是更好,给我一个关于如何使用Ruby/Sinatra的例子?

回答

7

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

我使用考拉这与西纳特拉,它像宣传的那样:

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

你找回JSON对象的哈希,Facebook的帖子:

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

休息,图也很容易。刚刚在Sinatra应用程序中测试过。完美的作品:

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

让我知道如果这不适合你。

+0

刚才看到你编辑了你的代码。它现在反映了我今天从cardinalblue得到的解决方案。无论如何,因为你是第一个回答我的问题,我不能拿回这个赏金:这是你的。 :) – Javier 2011-05-02 20:15:45

+0

我想它已经这样做了:你突然得到了111分。 – Javier 2011-05-02 23:02:42

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。

+0

是的 - 我在我的应用程序中使用POST;我猜想,任何想要解析signed_request的人都会这样做。 :)干杯! – atbell 2011-05-02 22:40:56

+0

我想你是对的。我刚刚添加了这一行,因为我花了一些时间才得到它,因为我的应用程序没有在FB画布之前运行(这也是我寻找这个“signed_request”的原因;-))。 – Javier 2011-05-02 22:59:27

+0

FWIW,Facebook也使用signed_request取消授权URL。只是你现在可能想要实现的东西,你成功解析它。 – atbell 2011-05-03 17:28:21

相关问题