1

我在将 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 PHP-SDK 集成到 Facebook。我的页面作为一个独立页面工作,但与 Facebook Canvas 集成是个问题。

这是我的配置/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 画布中工作?我只是不知道如何做到这一点......我已经使用 Auth-components 实现了“我自己的”管理员身份验证系统。我知道我需要从那里修复一些东西,但不知何故我不知道从哪里开始。移动部件太多...

下面的答案中提出的方法是否正确?至少它解决了这个问题,但我的没有。我的意思是,我可以转移到我的代码的答案中的关键元素是什么?或者,如果我只得到一张全貌,我会自己找到答案……

第二次更新!:

我 unset($this->request->data['signed_request']) 然后 $this->Security->csrfCheck = false... 没用。我错过了什么?

4

1 回答 1

1

“黑洞”是由于您的Security Component造成的。我相信您的问题已在此问题/答案中得到解决: CakePHP and Facebook with Security Component 打开

于 2013-08-08T14:33:45.117 回答