У меня проблемы с интеграцией приложения 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... не сработало. Что мне не хватает?