4

저는 Sinatra와 Rest-Graph gem을 사용하여 Facebook 앱을 만들었습니다. 이제 나는 embed the app as an iframe tab in a Facebook Page을 원합니다.Ruby/Sinatra 및 Rest-Graph 보석을 사용하여 Facebook 앱에서 signed_request 가져 오기

이렇게하려면 Facebook에서 내 앱으로 전송 한 signed_request의 데이터를 가져와야합니다. access_token이 추출

유틸리티 및 쿠키 체크 SIG/signed_request가

내가 사용하는 방법에 대한 문서를 찾을 수 없습니다 :

나머지-그래프 보석은 다음과 같은 기능 on its Github page을 말한다 이 "유틸리티". 어떤 문서 나 더 나은 점을 가르쳐 주시겠습니까? Ruby/Sinatra와 함께 사용하는 방법에 대한 예를 들어 주시겠습니까?

답변

7

거의 모든 그래프 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 객체의 해시를 얻을 페이스 북 게시물 :

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

방금 ​​Rest-Graph 보석 개발자 인 response to this question from "cardinalblue"이 있습니다.

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