1
보안 구성 요소가 켜기를 원합니다.보안 구성 요소가있는 CakePHP 및 Facebook
하지만 CakePHP 앱을 Facebook 탭에로드 할 때 FB는 내 양식에 $ _REQUEST [ 'signed_request']를 게시합니다.이 문제는 보안 구성 요소가이 "게시물"에 "반응"하고 유효성 검사를 제공한다는 것입니다 오류, 블랙홀 등
어떻게이 문제를 해결할 수 있습니까?
이 문제를 해결하려면 설명서에서 아무 것도 찾을 수 없습니다.
보안 구성 요소를 "수동으로"실행하여 실제로 양식을 제출할 때 "반응"하고 Facebook은 $ _REQUEST [ 'signed_request']를 양식에 게시 할 때가 아닙니다.
UPDATE :
<?php
App::uses('CakeEmail', 'Network/Email');
class PagesController extends AppController {
public $helpers = array('Html','Form');
public $components = array('RequestHandler');
public function beforeFilter() {
parent::beforeFilter();
$this->Auth->allow('*');
$this->Security->validatePost = true;
$this->Security->csrfCheck = true;
$this->Security->unlockedFields[] = 'signed_request';
}
public function home() {
$this->loadModel('Memberx');
if($this->request->is('post') && isset($this->request->data['Memberx']['name'])) {
//...save here, etc. ...
}
}
는 참고 : 나는 "블랙홀"오류가 발생합니다.
최종 업데이트 (@ tigrang의 대답 후) : 다음
public function beforeFilter() {
parent::beforeFilter();
$this->Auth->allow('*');
$this->set('hasLiked', false);
if(isset($this->request->data['signed_request'])){
$this->set('hasLiked', $this->hasLiked($this->request->data['signed_request']));
}
if(isset($this->request->data['Memberx']['signed_request'])) {
$this->set('hasLiked', $this->hasLiked($this->request->data['Memberx']['signed_request']));
}
/*
To go around Facebook's post $_REQUEST['signed_request'],
we unset the $_REQUEST['signed_request'] and disable the csrfCheck
ONLY after we have set the hasLiked view variable
*/
unset($this->request->data['signed_request']);
if (empty($this->request->data)) {
$this->Security->csrfCheck = false;
}
}
, 내보기에 다음과 같은 작업을 수행합니다
<?php
if($hasLiked) {
?>
You have liked this page!
<?php
}
?>
감사합니다 순전히! $ this-> request-> 데이터가 비어 있는지 확인한 다음 $ this-> Security-> csrfCheck를 false로 설정하면 문제가 해결됩니다! – wenbert
@tigrang 나는 같은 종류의 문제가 있습니다. 어떻게 그 함수의 "// 요청의 유효성 검사"부분을합니까? – hemppa