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