Как интегрировать CakePHP-приложение в холст Facebook

У меня проблемы с интеграцией приложения CakePHP (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, что мой безопасный URL-адрес Canvas:

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. Мне не удалось даже заставить работать самую простую страницу «hello world» только с index.php и facebook php-sdk. Я также пробовал с куки, установленными на 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() из-за большого количества ненужной информации)

Итак, я понял, что мне нужно как-то проверить этот signed_request от Facebook, чтобы мой сайт работал на холсте Facebook? Я просто понятия не имею, как это сделать... Я реализовал "свою собственную" систему аутентификации администратора с компонентами аутентификации. Я знаю, что мне нужно будет что-то исправить оттуда, но я как-то не знаю, с чего начать. Слишком много движущихся частей...

Является ли подход, представленный в ответе ниже, правильным? По крайней мере, это решило эту проблему, но у меня это не так. Я имею в виду, что является ключевым элементом в этом ответе, который я могу перенести в свой код? Или если бы я только получил полную картину, я бы сам нашел ответ...

ВТОРОЕ ОБНОВЛЕНИЕ! :

Я отключил($this->request->data['signed_request']), а затем $this->Security->csrfCheck = false... не сработало. Что мне не хватает?


person hemppa    schedule 08.08.2013    source источник


Ответы (1)


"Черная дыра" связана с вашим компонентом безопасности. Я считаю, что ваша проблема была решена в этом вопросе/ответе: CakePHP и Facebook с включенным компонентом безопасности

person Dave    schedule 08.08.2013
comment
Спасибо за это! Тот другой пост не решил проблему, но теперь я точно знаю, где искать решения. Это, безусловно, проблема, связанная с компонентом безопасности. @Дэйв - person hemppa; 09.08.2013