在我的Cake 2.3应用程序中,我有一个通过ajax调用的动作。由于我正在使用安全组件,因此我必须使用$this->Security->unlockedActions
,否则操作将失败。
但是,unlockActions
在调用$this->Security->requireAuth()
时不起作用。这是一个错误吗?我对CakePHP如何处理安全性有误解吗?
为什么unlockActions
无法覆盖requireAuth
?
答案 0 :(得分:1)
SecurityComponent::requireAuth()
将该操作添加到SecurityComponent::$requireAuth
中存储的一系列必需操作。
如果您查看安全组件的startup code,您会发现SecurityComponent::_authRequired()
(检查$requireAuth
数组的方法)在 >甚至检查解锁的动作。我想如果你需要一个授权的动作,那应该优先于告诉应用它没有。
我仍然认为这是一个错误(或错误记录),因为它在文档中明确指出:
在某些情况下,您可能希望禁用所有安全检查 一个动作(例如ajax请求)。您可以通过“解锁”这些操作 将它们列在您的beforeFilter中的$ this-> Security-> unlockedActions中。
这是一项新功能,因此最好打开一张解释混乱的故障单,看看核心团队对此有何看法。
我还应该注意,为ajax请求禁用安全组件并不总是必要的。我有几个成功使用安全组件的应用程序,以及与ajax并排的CSRF检查。
答案 1 :(得分:0)
身份验证与安全性非常不同。
安全性可以防止多种攻击您网站的方式,而auth组件可以处理您的用户许可。当一个成员更新他的个人资料时,我确实想验证它是一个登录的成员(身份验证),但我可能不想将安全组件用于他正在呼叫的操作。