2013-12-05 2 views
1

Я просто добавил SSL на свой сервер Ubuntu 12.04 apache2, на котором запущено приложение Cake 2.3.8. Я обязательно добавил https: // ... перед каждым звонком и подтвердил использование grep. Я не знаю, какие блокированные скрипты мне известны. Когда я пытаюсь сделать AJAX пост запросы из файла JS на мой сервер с помощью AJAX, я получаю сообщение об ошибке, какЗапрос AJAX POST с CakePHP, вызывающий ответ 400 (blackhole)

The request has been black-holed 
Error: The requested address '/sorts/available_spaces' was not found on this server. 

В моем файле JS, который делает запрос POST У меня есть

$.post("https://www.mywebsite.com/sorts/available_spaces",{'customerID' : self.customerID, 'arrivalDate' : self.arrivalDate},function(data) { 
    data = JSON.parse(data); 
    for(i=0;i<data.length;i++){ 
     self.roomNumberList.push({spaceNumber: data[i].spaceNumber, roomID: data[i].roomID}); 
    } 
}); 

В моей SortsController Я даже попытался установить контроль доступа происхождения, чтобы все, и отключил безопасность (временно), но я все еще получаю запрос на черную дыру

//SortsController 

var $components = array('Security'); 

public function beforeFilter(){ 
    $this->response->header('Access-Control-Allow-Origin', '*'); 
    $this->Security->unlockedActions = array('available_spaces', check_reservation'); 
    $this->Auth->allow('available_spaces','check_reservation'); 
    $this->Security->csrfCheck = false; 
    $this->Security->validatePost = false; 
    parent::beforeFilter(); 
} 

даже в методе available_spaces есть нет вызывает другие методы или что-либо за пределами SortsController. У меня нет ничего в моей модели Sort, и я вообще не называю безопасность вообще в своем AppController.

Вот трассировка стека. Я даже не вижу упоминания о SortsController или методе, кроме маршрутизации.

CORE/Cake/Controller/Component/SecurityComponent.php line 241 → SecurityComponent->blackHole(SortsController, string) 
[internal function] → SecurityComponent->startup(SortsController) 
CORE/Cake/Utility/ObjectCollection.php line 132 → call_user_func_array(array, array) 
[internal function] → ObjectCollection->trigger(CakeEvent) 
CORE/Cake/Event/CakeEventManager.php line 248 → call_user_func(array, CakeEvent) 
CORE/Cake/Controller/Controller.php line 675 → CakeEventManager->dispatch(CakeEvent) 
CORE/Cake/Routing/Dispatcher.php line 184 → Controller->startupProcess() 
CORE/Cake/Routing/Dispatcher.php line 162 → Dispatcher->_invoke(SortsController, CakeRequest, CakeResponse) 
APP/webroot/index.php line 118 → Dispatcher->dispatch(CakeRequest, CakeResponse) 

ответ

6

Ожидается, что сообщения через Ajax не будут работать с включенным компонентом безопасности.

Согласно http://whatswhat.no/development/framework/cakephp-2/465-making-a-jquery-ajax-call-with-security-component-activated-in-cakephp-2 вам нужно добавить свое действие на разлоченные действия компоненты Безопасности:

public function beforeFilter() { 
     parent::beforeFilter(); 
     $this->Security->unlockedActions = array('ajax_action'); 
} 
+0

Спасибо, она работала отлично. Я не зашел слишком глубоко с компонентом безопасности, поэтому я не знал об этом. Я ценю вашу помощь – user1443519

+0

'unlockedActions' работает в версии> = 2.3 ([ссылка] (http://book.cakephp.org/2.0/ru/core-libraries/components/security-component.html#disabling-csrf-and -post-данных валидации для специфических-действий)) –

 Смежные вопросы

  • Нет связанных вопросов^_^