[CakePHP2.x] 使用安全组件时出现问题 [black-holed]

这是开发团队的 Hase。

我在 CakePHP 中使用 Security 组件实现登录功能时,
遇到了这个奇怪的错误。

该请求已被搁置。

黑洞?那是什么?
这种情况尤其容易发生在你提交表单后,返回浏览器,然后再提交一次的时候。

由于我当时还是个新手,不知道这是什么错误,所以我
决定研究一下如何解决它。

允许 POST 和 Ajax

由于表单屏幕上几乎每次都会出现错误,
我将 beforeFilter 设置为允许 Post 和 Ajax。

app/Controller/AppController.php

public function beforeFilter() { $this->Security->validatePost = false; $this->Security->csrfCheck = false; ... // ~执行一些处理~ }

我抱着一丝希望检查了一下,希望错误不会再出现
,但同样的错误依然存在。
我又开始重新调查。

修复覆盖

AppController.php的 beforeFilter 中允许 Post 和 Ajax
控制器覆盖了 beforeFilter,导致
通信不再被允许。


在 beforefilter 中添加parent::beforeFilter();来修复导致黑洞错误的控制器

app/Controller/UserController.php

public function beforeFilter() { parent::beforeFilter(); // ~一些处理~ }

我以为错误会消失,所以
又检查了一遍,但同样的错误再次出现。

处理黑洞回调

我已经做到这一步了,但是官方网站上有关于如何处理这个问题的说明。

当受到安全组件的限制时,默认情况下无效请求将被丢弃并返回 400 错误。
您可以通过在控制器中将 `$this->Security->blackHoleCallback` 设置为回调函数来更改此行为。

换句话说,在提交表单后点击浏览器中的“返回”按钮,然后再提交一次,这
是一个无效请求,因此
错误,导致黑洞错误。

我应该一开始就查看官方网站的。

因此,我修改了导致黑洞错误的控制器的前置过滤器,具体如下:

public function beforeFilter() { parent::beforeFilter(); $this->Security->blackHoleCallback = 'blackhole'; $this->Security->validatePost = false; $this->Security->csrfCheck = false; // ~ 一些处理 ~ } // 让黑洞通过 public function blackhole($type) { }

现在那个黑洞般的错误消失了!!
真是松了一口气。

参考

https://book.cakephp.org/2.0/ja/core-libraries/components/security-component.html
http://www.aipacommander.com/entry/2015/04/27/180000

如果您觉得这篇文章有用,请点击【点赞】!
3
加载中...
3票,平均分:1.00/13
7,696
X Facebook Hatena书签 口袋

这篇文章的作者

关于作者

长谷达也

应届毕业生加入 Beyond Co., Ltd.。

我们开发网络系统(开发基于浏览器的服务和系统,例如网络服务、数字内容和业务管理系统)和游戏 API(开发用于与应用程序游戏通信的程序)。

我们也为 Shopify 开发私有/定制应用程序。

他最初在大阪办公室工作,2019年被调到横滨办公室。
他的爱好是棒球、卡拉OK和动漫。