CakePHP的3 POST方法 '403禁止'

问题描述 投票:1回答:2

我今天跨越一个非常奇怪的问题来了,但没有找到任何解决方案。我使用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库和混帐上传项目文件。我会很感激你解决此问题的帮助。这实在是一个常数头痛不能够做任何修改。

mysql cakephp-3.0 http-status-code-403
2个回答
1
投票

只是为将来的参考,我通过显式定义在POST功能$this->Form->create请求类型解决了这个问题。

这是我碰到的同时使用CakePHP 3奇怪的错误之一!不知道为什么默认PUT方法是行不通的。它被转换为GET


0
投票

呵呵,终于让我找到罪魁祸首本身我自己的。这是我得到的,在这里你去解释:

如果您在使用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>
......     

所以选项只把你手动生成表单上的隐藏字段。

祝好运

© www.soinside.com 2019 - 2024. All rights reserved.