[CakePHP2.x]使用安全组件时出现问题[黑洞]
这是开发团队的Hase。
当我使用CakePHP的Security组件实现登录功能时,
出现了这样的神秘错误。
请求已被黑洞
黑洞?这是什么? 。
当您提交表单后单击浏览器上的“返回”然后再次提交时,尤其会发生这种情况。 。 。
我不知道这个错误是什么,所以
我决定研究如何解决它。
允许 Post 和 Ajax
由于几乎所有错误都发生在表单屏幕上,因此
我更改了 beforeFilter 以允许 Post 和 Ajax。
应用程序/控制器/AppController.php
public function beforeFilter() { $this->Security->validatePost = false; $this->Security->csrfCheck = false ... // ~一些处理~ }
我检查了一下,希望不再出现该错误
,但还是出现了同样的错误。
调查再次开始。
修复了覆盖问题
AppController.php的 beforeFilter 中允许 Post 和 Ajax
控制器会覆盖 beforeFilter 并且
不再允许通信。
因此,我修复了导致黑洞错误的控制器。
将parent::beforeFilter();到 beforefilter
应用程序/控制器/UserController.php
public function beforeFilter() {parent::beforeFilter(); // ~一些处理~ }
我以为错误已经消失了,
所以我检查了一下,但同样的错误又出现了。 。
处理黑洞回调
我已经走到这一步了,但是官方网站有关于如何处理它的说明。 。
当受到安全组件限制时,默认情况下,请求将作为格式错误的请求被丢弃,并显示 400 错误。
您可以通过将控制器中的回调函数设置为 $this->Security->blackHoleCallback 来更改此行为。
也就是说,提交表单后点击浏览器的“返回”,再次提交就是一个
无效请求,也就是说
返回了400错误,出现了黑屏错误。
我应该从一开始就看官方网站。 。
因此,对发生黑洞错误的Controller的beforefilter进行如下修改。
公共函数 beforeFilter() { Parent::beforeFilter(); $this->Security->blackHoleCallback = 'blackhole'; $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