我今天遇到了一个非常奇怪的问题,找不到任何解决方案。我正在使用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上初始化了GIT
存储库并上传了项目文件。我非常感谢你帮助解决这个问题。不能修改任何东西真的是一个令人头痛的问题。
答案 0 :(得分:1)
仅供将来参考,我通过在POST
函数中明确定义$this->Form->create
的请求类型来解决此问题。
这是我在使用CakePHP 3时遇到的最奇怪的错误之一!不确定为什么默认的PUT
方法不起作用。它正在转换为GET
。
答案 1 :(得分:0)
嗯,终于我自己找到了罪魁祸首。.这就是我得到的解释,在这里,您去:
如果您在cakephp中使用csrf来确保安全性,则可能会发现cakephp过滤掉ajax或表单中所有该死的POST,GET,PUT,如果未找到auth,cakephp将以403 HTTP状态进行响应。.
这意味着您必须在每个请求上放置一些csrf令牌,如无记名令牌,以便cakephp识别该请求。看看,如果您使用的是AJAX调用,那么必须手动将csrf令牌放在此处进行解释:https://book.cakephp.org/3.0/en/controllers/components/csrf.html
如果您手动创建了表单,则必须将令牌放入表单本身,如果您使用cakephp helper创建表单,您将看到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>
......
因此,该选项仅将那些隐藏的字段放在您手动生成的表单上。
祝你好运