2013-05-24 5 views
2

저는 호스팅중인 페이지 탭 앱이 있습니다. http와 https가 모두 지원됩니다. signed_request 패키지가 예상대로 수신되는 동안 디코딩 한 후에 페이지 정보가 포함되지 않습니다. 그 데이터는 단순히 누락되었습니다.페이지의 Facebook App 페이지에서 signed_request가 수신되었지만 페이지 데이터가 누락되었습니다.

페이 스북, 내 호스팅 사이트 및 심지어 'go-between'- facebook의 정적 페이지 핸들러 중에서 스킴이 (https) 사용되고 있음을 확인했습니다.

또한 페이지 탭을 지원하는 새로운 응용 프로그램을 만들었지 만 동일한 결과를 얻었습니다. 단순히 signed_request에 페이지 정보가 없습니다.

사람들이 생각할 수있는 다른 원인은 무엇입니까?

여기 https://www.facebook.com/dialog/pagetab?app_id=176236832519816&next=https://www.intelligantt.com/Facebook/application.html

내가 사용하고있는 페이지 탭입니다 :

내가이 링크를 사용하여 페이지 탭에 응용 프로그램을 추가 (참고 : 권한이 필요) : 여기

https://www.facebook.com/pages/School-Auction-Test-2/154869721351873?id=154869721351873&sk=app_176236832519816

수신하고있는 디코딩 된 signed_request입니다 :

{ "algorithm": "HMAC-SHA256", "REMOVED!" - 캔버스 앱 URL이 페이지 탭 URL과 일치하지 않을 수도 있으므로 몇 시간 동안 시나리오를 진행하는 데 시간이 많이 걸렸을 것입니다. 후행 슬래시. 둘 다 어디에서 후행을 했니? 또는 쿼리 매개 변수로 또는 아닙니다.

캔버스 앱 URL과 페이지 탭 URL로 페이지 탭을 만들 때 '다음'값을 변경해 보았습니다.

두 카운트 모두 성공하지 못했습니다.

나는 signed_request에서 'code'값을보고 있기 때문에 Facebook이 내 URL과 일치하지 않거나 두 번째 요청을 캡처하고 있음을 알았습니다. 그러나, 내가 통과 한 모든 URL 순열을 통해 URL이 일치한다고 생각합니다. 나는 또한 'auth.authResponseChange'를 구독했는데, 첫 번째 authResponse는 page_id가 포함 된 signed_request를 포함해야한다.

나는 명성이 있다면, 이것에 현상금을 추가 할 것입니다.

감사합니다.

+0

앱 ID와 앱 비밀번호가 올바르게 설정되어 있습니까? 이 경우 일반적으로 문제가됩니다. php sdk를 사용하고 있습니까? 그것은 시간 낭비의 (그리고 코드) 자신의 인코딩을 할 수있는 동안 "getSignedRequest"는 PHP SDK에. – luschn

+0

php sdk가 아닌 javascript API를 사용하고 있습니다. 나는 앱 ID가 100 % 긍정적임을 확신합니다. App Secret 나는 자바 스크립트 API를 사용하고 있지 않습니다. 내 이해는 iframe이며 JavaScript는 'full'signed_request를 수신합니다. 이 서명 된 요청은 Facebook 사양에 따라 파싱됩니다. https://developers.facebook.com/docs/facebook-login/using-login-with-games/ –

+0

여기 iframe + javascript가 믿을만한 Facebook 설명서가 있습니다. "full"signed_request 수신 : https://developers.facebook.com/blog/post/462/ 문서에서 - "이제는 Facebook 및 캔버스 응용 프로그램을 포함하여 Facebook을 통해 실행되는 응용 프로그램을 동일한 응용 프로그램을 사용하여 빌드 할 수 있음을 의미합니다. 단순한 표준 기반 웹 프로그래밍 모델 (HTML, JavaScript 및 CSS)을 제공합니다. " –

답변

1

나는 정확히 똑같은 문제에 대해 ~ 5 시간을 보냈고 이전의 대답은 정확하지 않은 것으로 게시했습니다.

귀하의 탭이 순수한 자바 스크립트로 정적 html 페이지 (* .htm 확장자)로 구현 된 경우 signed_request에 페이지 데이터가 누락 된 것으로 나타났습니다.

정확한 페이지에서 똑같은 테스트를 반복했지만 Perl 스크립트 (* .cgi 확장자) 내 html 페이지 (js 포함)를 감 쌉니다 ... 그리고 voila는 signed_request에 페이지 정보가 있습니다.

혼란 스럽지만 (페이스 북의 디자인 선택으로 더 잘 문서화되어야 함), 범위 내에서 비밀 키를 삽입하지 않고 Javascript 내에서 signed_request를 전체적으로 검증하는 것이 불가능할 수도 있습니다. 잠재적 인 해커).

+0

감사합니다 yahermann, 진단 및 해결책이 정확합니다! Facebook이이 보안 기능을 문서화 한 경우 우리 모두에게 (그리고 다른 사람들을 추측하여) 한 시간의 시간을 절약 할 수있었습니다. 감사! –

0

그것은 PHP SDK 훨씬 쉬울 것,하지만 당신은 그냥 자바 스크립트를 사용하려는 경우, 어쩌면이 도움이 될 것입니다 또한

Facebook Registration - Reading the data/signed request with Javascript

, 당신이 체크 아웃 할 수 있습니다 : https://github.com/diulama/js-facebook-signed-request

+0

정보를 제공해 주셔서 감사합니다. 나는 signed_request를 파싱하는 것이 문제가 아니라고 생각한다. 오히려, 일부 구성 요구 사항이 충족되지 않아서 signed_request가 단순히 페이지 정보를 갖고 있지 않은 것처럼 보입니다. –

0

자바 스크립트 signed_request로 전체 매개 변수를 가져올 수 없으므로 php sdk를 사용하여 전체 signed_request를 가져옵니다. 당신이 자바 스크립트 variabls에 필요한 값을 기록 ...

instanciation 후 php SDK와 함께 ... 페이스 북은 다음과 같이 개체를 사용하십시오.

$ signed_request = $ facebook-> getSignedRequest(); var_dump ($ signed_request);

이것은 단지 디버깅이지만 인쇄 된 배열에는 보안상의 이유로 js sdk에서 얻지 못할 많은 값이 포함되어 있음을 알 수 있습니다.

희망이있는 사람이라면 누구에게나 도움이 될 것입니다.이 문제는 3 시간 이내에 실행되는 모든 사람에게 필요합니다.