【发布时间】:2015-06-24 05:16:56
【问题描述】:
所以,我有一个使用DataTables 自动生成的表。我的 CakePHP 中的一个操作会抓取该表的数据,并将其格式化为 JSON 以供数据表使用,这是格式化的 JSON:
<?php
$data = array();
if (!empty($results)) {
foreach ($results as $result) {
$data[] = [
'name' => $result->name,
'cad' => $this->Number->currency($result->CAD, 'USD'),
'usd' => $this->Number->currency($result->USD, 'USD'),
'edit' => '<a href="' .
$this->Url->build(['controller' => 'Portfolios', 'action' => 'edit', $result->id]) .
'"><i class="fa fa-pencil"></i></a>',
'delete' => '<input type="checkbox" class="delete" value="' . $result->id . '">'
];
}
}
echo json_encode(compact('data'));
如您所见,我有一个“删除”选项,它输出一个复选框,其中包含相应元素的 id 值。选中该复选框时,会显示一个删除按钮,该按钮发送此 ajax 请求:
$('a#delete').on('click', function(e) {
e.preventDefault();
var checkedValues = [];
$('input.delete:checked').each(function() {
checkedValues.push($(this).val());
});
$.ajax({
url: $(this).attr('href'),
type: 'POST',
data: checkedValues
});
})
这个 ajax 帖子转到我的控制器操作 delete()。我遇到的问题是我收到一条错误消息,指出“无效的 Csrf 令牌”。我知道为什么会这样,我正在提交一个启用了 Csrf 保护的表单,它没有添加 Csrf 令牌。
我不知道如何为这种情况手动创建 Csrf 令牌(在页面加载后生成输入值)。我也不知道如何禁用 Csrf 保护。我读了this,但代码放在 beforeFilter 函数中,据我了解,这意味着它在每个动作上运行,而不仅仅是这个,这不是我想要的。另外,老实说,我更喜欢不禁用安全功能的解决方案。
是否有为此特定操作禁用 Csrf,或者有更好的方法来做到这一点?
【问题讨论】:
标签: cakephp cakephp-3.0