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

相關問題