4

私はSinatraとRest-Graph gemを使ってFacebookアプリを構築しました。今私はembed the app as an iframe tab in a Facebook Pageになりたいです。Ruby/SinatraとRest-Graph宝石のFacebookアプリケーションでsigned_requestを取得

これを行うには、signed_requestからFacebookに送信されたデータを取得する必要があります。私が使用する方法上の任意のドキュメントを見つけることができませんでしたsigned_request

/クッキーにaccess_tokenはと チェックSIGを抽出するために

ユーティリティ:休憩・グラフの宝石は、次の機能on its Github pageを述べ

この "ユーティリティ"。あなたは私にいくつかのドキュメントを教えてもらえますか、それとも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

+0

私はそれが既にあると思います:あなたは突然111点を得ました。 – Javier

0

私はちょうどresponse to this question from "cardinalblue"、Rest-Graph宝石の開発者を手に入れました。この小さな例では、私が探していたまさにでした:

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ページはGETの代わりにusing a POST requestページを取得します。

+0

ええ - 私は私のアプリでPOSTを使用しています。誰かがsigned_requestを解析しようと思っているのであれば、同じことをやろうと思っていたと思います。 :)乾杯! – atbell

+0

私はあなたが正しいと思います。私はちょうどその行を追加しました。なぜなら、私のアプリはFBキャンバスの中で実行されていなかったからです(これが、私がこの "signed_request"のことを探していた理由です;-))。 – Javier

+0

FWIW、Facebookはまたsigned_request認証解除URLを使用します。あなたがそれを成功裏に解析しているので、おそらく今実装したいことがあるでしょう。 – atbell

関連する問題