2013-08-08 1 views
1

CakePHP-app (2.3.8)를 Facebook 캔버스에 통합하는 데 문제가 있습니다. 내가 페이스 북에서 앱 페이지를로드 할 때, 대답은 :CakePHP-app를 Facebook 캔버스에 통합하는 방법

https://facebook.mydomain.com/ 

그래서 페이지를 페이스 북에 의해 발견된다 :

The request has been black-holed 
Error: The requested address '/?fb_source=search&ref=ts&fref=ts' was not found on this server. 

내 캔버스 보안 URL은 그 페이스 북의 응용 프로그램 설정에서 정의했습니다. (실제로 CakePHP의 tmp/디렉토리가 쓰기 가능하지 않으면 Facebook의 앱 페이지에 오류 메시지가 표시되어 URL이 적어도 정확합니다.)

Facebook 용 PHP-SDK를 사용하여 Facebook에 통합했습니다. 내 페이지는 독립형 페이지로 작동하지만 Facebook Canvas에 통합하면 문제가됩니다.

여기 내 구성/

$config = array(
    'Facebook' => array(
      'appId' => '***********', 
      'secret' => '**********************' 
      ) 
    ); 

그리고 여기 내 페이스 북 관련 물건에 대한 컨트롤러 facebook.php : 내가 찾은

public function login() { 
      Configure::load('facebook'); 
      $appId = Configure::read('Facebook.appId'); 
      $app_secret = Configure::read('Facebook.secret'); 
      $facebook = new Facebook(array(
          'appId' => $appId, 
          'secret'=> $app_secret 
      )); 
      $loginUrl = $facebook->getLoginUrl(array(
          'scope' => 'user_birthday,user_location', 
          'redirect_uri' => BASE_URL . 'books/facebook_connect', 
          'display' => 'popup' 
      )); 
      $this->redirect($loginUrl); 
    } 
public function facebook_connect() { 
      Configure::load('facebook'); 
      $appId = Configure::read('Facebook.appId'); 
      $app_secret = Configure::read('Facebook.secret'); 
      $facebook = new Facebook(array(
          'appId' => $appId, 
          'secret'=> $app_secret 
      )); 
      $user = $facebook->getUser(); 

// And the rest of this function is only for saving the authenticated user to the database 

모든 튜토리얼은 매우 간단하고 그들은 보이게 페이스 북의 캔버스에 쉽게 통합 할 수 있습니다. 나는 index.php와 facebook php-sdk만으로 가장 간단한 "hello world"페이지를 얻는데 성공하지 못했습니다. 나는 쿠키를 사실대로 설정하려고했지만 그 역시 도움이되지 못했습니다.

이것은 매우 광범위한 질문이며 내 경우에는 무엇이 잘못 될 수 있는지 상상하기 어려워 야합니다.하지만 비슷한 오류로 인해 어떤 것이 있는지 알아낼 수 있다면 지식을 공유하십시오.

업데이트! :

다음은 var_dump ($ this-> params)입니다. booksController.php에서 :

그래서 내가 이해 무엇

object(CakeRequest)#6 (9) { 
["params"]=> 
array(5) { 
["plugin"]=> 
NULL 
["controller"]=> 
string(5) "books" 
["action"]=> 
string(5) "index" 
["named"]=> 
array(0) { 
} 
["pass"]=> 
array(0) { 
} 
} 
["data"]=> 
array(2) { 
["signed_request"]=> 
string(514) "//here is a very long string hash" 
["locale"]=> 
string(5) "en_GB" 
} 

(불필요한 정보가 많이 있기 때문에 내가 여기) 전체 위해서 var_dump를 (붙여 넣기하지 않은 것은) 내가 어떻게 든에 페이스 북에서 해당 signed_request을 확인할 필요가있다 내 웹 사이트를 Facebook 캔버스에서 사용 하시겠습니까? 나는 그걸하는 법을 모른다. Auth-components로 "나만의"관리자 인증 시스템을 구현했다. 나는 그곳에서 무언가를 고칠 필요가 있다는 것을 알고 있지만 어떻게 시작 해야할지 모릅니다. 움직이는 부품이 너무 많음 ...

아래의 답변에 나와있는 접근 방법이 올바른 것입니까? 적어도 문제는 해결되었지만, 문제는 해결되지 않았습니다. 내 코드에 전달할 수있는 대답의 핵심 요소는 무엇입니까? 또는 전체 그림 만 얻으면 답을 찾아 낼 것입니다 ...

SECOND UPDATE! :

설정을 해제하고 ($ this-> request-> data [ 'signed_request']) $ this-> Security-> csrfCheck = false ...가 작동하지 않습니다. 내가 뭘 놓치고있어?

답변

1

"블랙홀"은 (는) Security Component입니다. 귀하의 문제가이 질문/답변에서 해결 된 것으로 생각됩니다 : CakePHP and Facebook with Security Component turned on

+0

감사합니다. 그 다른 게시물은 문제를 해결하지 못했지만 지금은 해결책을 찾을 곳을 확실히 알고 있습니다. 반드시 보안 구성 요소 관련 문제입니다. @Dave – hemppa