4

Я создал приложение Facebook с использованием Sinatra и Rest-Graph gem. Теперь я хотел бы embed the app as an iframe tab in a Facebook Page.Захват signed_request в приложении Facebook с Ruby/Sinatra и камнем Rest-Graph

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

Остальной-Graph самоцвет утверждает следующую особенность on its Github page:

утилита для извлечения access_token и чек сиговых в печенье/signed_request

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

ответ

7

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

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

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"]) 

Lemme знает, если это не сработает для вас.

+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 

Sidenote: В случае, если вы создаете что-то подобное, пожалуйста, обратите внимание на post '/' do. Страницы Facebook забирают вашу страницу using a POST request вместо GET.

+0

Да - я использую POST в своем приложении; Думаю, я предполагал, что любой, кто хочет разобрать signed_request, будет делать то же самое. :) Приветствия! – atbell

+0

Думаю, ты прав. Я просто добавил эту строку, потому что мне потребовалось некоторое время, чтобы получить это, поскольку мое приложение раньше не работало внутри холста FB (вот почему я искал эту вещь signed_request ;-)). – Javier

+0

FWIW, Facebook также использует signed_request URL-адрес для авторизации. Просто то, что вы, вероятно, захотите реализовать сейчас, когда вы его разбираете успешно. – atbell