如何将CakePHP-app集成到Facebook画布

时间:2013-08-08 13:34:02

标签: facebook cakephp facebook-canvas

我在将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安全网址:

https://facebook.mydomain.com/

所以这个页面是由Facebook发现的。 (实际上,如果CakePHP的tmp /目录不可写,Facebook的应用程序页面会显示错误消息 - >所以URL至少是正确的)

我使用Facebook PHP-SDK集成到Facebook。我的页面作为独立页面工作,但是集成到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”页面,我也没有成功。我也试过将cookies设置为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的signed_request以使我的网站在Facebook画布上工作?我只是没有任何线索如何做到这一点...我已经使用Auth组件实现了“我自己的”管理员身份验证系统。我知道我需要从那里修理一些东西,但我不知道从哪里开始。移动部件太多......

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

第二次更新! :

我取消设置($ this-> request-> data ['signed_request'])然后$ this-> Security-> csrfCheck = false ...不起作用。我缺少什么?

1 个答案:

答案 0 :(得分:1)

“黑洞”归因于你的Security Component。我相信您的问题已在此问题/答案中得到解决:CakePHP and Facebook with Security Component turned on