問題
CakePHP4でajaxすると403になる。
原因
「config/routes.php」に全体のCSRFチェックの処理がデフォルトで入っているため、
フォーム以外からのPOSTはエラーになる。
対策1
以下を参照
http://tech.zhu-weichen.com/2020/09/15/164917/6/
対策2
最初は対策1をとっていたが、トークンを送信する形にしてみた。
html
<input type="hidden" name="_csrfToken" id="_csrfToken" autocomplete="off" value="<?= $this->request->getAttribute('csrfToken') ?>">
javascript
$.ajax({
url: "test/ajax_test",
dataType: "json",
type: "post",
data: {"_csrfToken":$("#_csrfToken").val()},
success: function(data) {}
});
TestController.php
function ajaxTest() {
// 取得
$data = $this->request->getData();
// 返却
return $this->response->withType('application/json')->withStringBody(json_encode($data))
}