Выбор подписанного запроса в приложении Facebook с помощью Ruby / Sinatra и драгоценного камня Rest-Graph - PullRequest
4 голосов
/ 14 апреля 2011

Я создал приложение Facebook, используя Sinatra и самоцвет Rest-Graph .Теперь я бы хотел встроить приложение в виде вкладки iframe на странице Facebook .

. Для этого мне нужно получить данные из signed_request, отправленного в мое приложение Facebook.

Драгоценный камень Rest-Graph указывает следующую функцию на своей странице Github :

Утилита для извлечения access_token и проверки подписи в cookie / signature_request

Я не смог найти никакой документации о том, как использовать эту «утилиту».Можете ли вы указать мне какую-то документацию или, что еще лучше, дать пример того, как это используется с Ruby / Sinatra?

Ответы [ 2 ]

7 голосов
/ 27 апреля 2011

Почти все библиотеки API Graph, которые доступны, работают с подписанным_просмотром аналогичным образом.Rest-Graph имеет метод parse_signed_request ( Rest-Graph / lib / core.rb ), который вы можете вызывать в Sinatra.

Я использую Koala для этого с Sinatra, и он работаеткак объявлено:

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"
}

rest-graph также делает его довольно простым.Только что проверил это в приложении Sinatra.Прекрасно работает:

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

Дай мне знать, если это не сработает для тебя.

0 голосов
/ 03 мая 2011

Я только что получил ответ на этот вопрос от "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

Sidenote: Если вы создаете что-то подобное, обратите внимание на post '/' do. Страницы Facebook получают вашу страницу , используя запрос POST вместо GET.

...