在Cakephp3中,启用Csrf组件时。我如何在ajax调用中使用它。在beforeSendajax的此参数中,csrf令牌设置在标头中。什么是价值csrfToken。由于它给出了错误
beforeSend
csrfToken
未定义csrfToken
beforeSend: function(xhr){ xhr.setRequestHeader('X-CSRF-Token', csrfToken); },
另外,如何为某些ajax调用禁用Csrf组件。
CSRF组件将当前令牌写入,作为请求参数_csrfToken,您可以通过request objects param()方法(或getParam()从CakePHP 3.4开始)获取它:
_csrfToken
param()
getParam()
setRequestHeader('X-CSRF-Token', <?= json_encode($this->request->param('_csrfToken')); ?>);
可以通过从控制器事件管理器中删除CSRF组件来禁用它。您必须确定需要执行什么条件,例如针对特定操作,例如:
public function beforeFilter(\Cake\Event\Event $event) { parent::beforeFilter($event); if ($this->request->param('action') === 'actionXyz') { $this->eventManager()->off($this->Csrf); } }
如果您使用的是CSRF中间件,则令牌仍可作为名为的请求参数使用_csrfToken,禁用中间件,但工作方式有所不同,请参见例如 [Cakephp3.5.6禁用控制器的CSRF中间件]
也可以看看