我今天跨越一个非常奇怪的问题来了,但没有找到任何解决方案。我使用CakePHP 3与MySQL和Apache一起。一切工作完美,直到今天,但是,当我试图编辑论坛的帖子之一,它没有保存,我得到了403 Forbidden
响应。以下是我得到的回应:
Request URL:https://www.example.com/users/edit/2
Request Method: POST
Status Code:403 Forbidden
奇怪的是,它工作正常,当我尝试创建新的论坛帖子以及对GET
请求时,我加载编辑页面。但是,当我修改字段并尝试保存,我被卡住与403 Forbidden
。
我想在过去的6小时内每意思也没有找到任何解决方案。我检查数据库用户的编辑权限,试图删除文件.htaccess
完全清除浏览器缓存和Cookie但没有任何帮助的。在托管帐户中的其他网站工作正常,没有问题与他们。
今天我做了唯一值得注意的就是我初始化GIT
库和混帐上传项目文件。我会很感激你解决此问题的帮助。这实在是一个常数头痛不能够做任何修改。
只是为将来的参考,我通过显式定义在POST
功能$this->Form->create
请求类型解决了这个问题。
这是我碰到的同时使用CakePHP 3奇怪的错误之一!不知道为什么默认PUT
方法是行不通的。它被转换为GET
。
呵呵,终于让我找到罪魁祸首本身我自己的。这是我得到的,在这里你去解释:
如果您在使用CakePHP的CSRF安全可能会发现,每一个该死的POST,GET,在阿贾克斯或形式PUT将被CakePHP的过滤,如果没有权威性地发现CakePHP就会有403个HTTP响应状态..
这意味着你必须把一些CSRF令牌喜欢在每次您的请求承载令牌,以便CakePHP的承认请求。见,如果你正在使用AJAX调用,所以你必须把CSRF令牌手动这里解释:https://book.cakephp.org/3.0/en/controllers/components/csrf.html
如果是手动创建一个表单,你必须把令牌形式本身里面,如果你使用CakePHP创建一个表单辅助函数,你会看到CakePHP中产生了一些隐藏的参数像这样的
<form enctype="multipart/form-data" method="post" accept-charset="utf-8" action="/SFW/CMS/event/comment">
<div style="display:none;">
<input type="hidden" name="_method" value="POST">
<input type="hidden" name="_csrfToken" autocomplete="off" value="2a39630d2a1c20d43xxxx">
</div>
......
所以选项只把你手动生成表单上的隐藏字段。
祝好运