我使用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一起使用的例子?
答案 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('<', '<')}\n"
end
run Sinatra::Application
旁注:如果您正在构建类似的内容,请注意post '/' do
。 Facebook页面获取您的页面using a POST request而不是GET。