【问题标题】:How to integrate CakePHP-app to Facebook canvas如何将 CakePHP-app 集成到 Facebook 画布
【发布时间】:2013-08-08 13:34:01
【问题描述】:

我在将 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 的 app-page 会显示错误信息 -> 所以 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... 没用。我错过了什么?

【问题讨论】:

    标签: facebook cakephp facebook-canvas


    【解决方案1】:

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

    【讨论】:

    • 谢谢!其他帖子没有解决问题,但现在我绝对知道在哪里寻找解决方案。这肯定是与安全组件相关的问题。 @戴夫
    猜你喜欢
    • 1970-01-01
    • 2014-10-16
    • 2013-08-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多