CakePHP-app (2.3.8) を Facebook キャンバスに統合する際に問題があります。Facebook でアプリ ページを読み込むと、答えは次のようになります。
The request has been black-holed
Error: The requested address '/?fb_source=search&ref=ts&fref=ts' was not found on this server.
Facebook のアプリ設定で、Canvas セキュア URL を次のように定義しました。
https://facebook.mydomain.com/
そのため、ページは Facebook によって検出されます。(実際には、CakePHP の tmp/ ディレクトリが書き込み可能でない場合、Facebook のアプリ ページにそれに関するエラー メッセージが表示されます -> したがって、URL は少なくとも正しいです)
Facebook への統合に Facebook PHP-SDK を使用しました。私のページは独立したページとして機能しますが、Facebook Canvas への統合が問題です。
ここに私のConfig/facebook.phpがあります
$config = array(
'Facebook' => array(
'appId' => '***********',
'secret' => '**********************'
)
);
そして、ここにFacebook関連のものの私のコントローラがあります:
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
私が見つけたすべてのチュートリアルは非常に簡単で、Facebook キャンバスに簡単に統合できるように見えます。index.php と facebook php-sdk のみを使用して、最も単純な「hello world」ページを機能させることさえできませんでした。Cookie を true に設定して試してみましたが、どちらも役に立ちませんでした。
これは非常に幅広い質問であり、私の場合に何が問題なのかを想像するのは難しいに違いありませんが、何かを見つけることができるか、同様のエラーに苦しんでいる場合は、知識を共有してください.
アップデート !:
これが 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() 全体をここに貼り付けませんでした)
だから私が理解したのは、私のウェブサイトを Facebook キャンバスで動作させるには、Facebook からの signed_request を何らかの方法で検証する必要があるということです。それを行う方法がまったくわかりません...「独自の」管理者認証システムを認証コンポーネントで実装しました。そこから何かを修正する必要があることはわかっていますが、どこから始めればよいのかわかりません。可動部多すぎ…
以下の回答に示されているアプローチは正しいですか? 少なくともその問題は修正されましたが、私の場合は修正されませんでした。私が言いたいのは、コードに転送できるその答えの重要な要素は何ですか? それとも、全体像さえつかめば、自分で答えを見つけることができます...
2回目の更新!:
unset($this->request->data['signed_request']) してから $this->Security->csrfCheck = false... は機能しませんでした。私は何が欠けていますか?