Cakephp 3.4 AJAX 请求抛出 403 禁止错误
Posted
技术标签:
【中文标题】Cakephp 3.4 AJAX 请求抛出 403 禁止错误【英文标题】:Cakephp 3.4 AJAX request throws 403 forbidden error 【发布时间】:2018-02-21 12:24:09 【问题描述】:我一直在尝试通过 AJAX 向控制器发送一些数据,但对于我来说,我似乎无法让它工作;每次我发出请求时,都会抛出 403 禁止错误。
这是 ajax 请求:
$.ajax(
type: 'post',
url:"<?php echo Router::url(array('controller'=>'Atls','action'=>'saveTime', '_ext' => 'json'));?>",
dataType: 'json',
data: atl_id: idTimerPaused, time: actual_time,
beforeSend: function(xhr)
,
success: function (response)
console.log('Nailed It');
,
error: function(jqXHR, exception)
console.log(jqXHR);
);
return false;
控制器动作:
public function saveTime()
if ($this->request->is('post') && $this->request->is('ajax'))
$content = $this->request->getData();
$query = $this->Atls->query();
$result = $query
->update()
->set(
$query->newExpr('actual_time = '. $content['time'])
)
->where([
'id' => $content['atl_id']
])
->execute();
$this->set(compact('content'));
$this->set('_serialize', ['content']);
$this->render('ajax_response', 'ajax');
我已经在 routes.php 文件中加载了扩展 (Router::extensions('json', 'xml');)
请求处理程序也被加载并允许该函数:
public function initialize()
parent::initialize();
$this->loadComponent('RequestHandler');
public function beforeFilter(Event $event)
parent::beforeFilter($event);
$this->Auth->allow('saveTime');
//Change layout for Ajax requests
$this->viewBuilder()->layout('appTemplate');
if ($this->request->is('ajax'))
$this->viewBuilder()->layout('ajax');
“ajax_response”视图也已添加。
我看不出问题出在哪里。因此,我将不胜感激任何帮助我解决这个问题。
【问题讨论】:
嗨,您的服务器上是否启用了任何 .htacess 和 URL 重写? @headmax .htaccess 是框架自带的通用的,没有被修改过。我启用了 mod_rewrite。 任何文件夹权限受限?在进程调用中不如755?您的 apache 或 php 日志中是否有任何错误? 这是最让我沮丧的,日志上没有显示错误,所有文件夹都是 755。 看看文件调用的权限 if is 644 :( ? 【参考方案1】:您是否使用了“Csrf”组件?就我而言,这就是问题所在。
https://book.cakephp.org/3.0/en/controllers/components/csrf.html#csrf-protection-and-ajax-requests
【讨论】:
太棒了!我不知道为什么这个答案没有更多的分数!!【参考方案2】:当您在大多数情况下遇到403 禁止错误时,会话已过期,用户必须重新登录。
【讨论】:
你认为为什么会涉及会话? 在我的大多数情况下,当用户的会话已过期并且 Ajax 请求被发送到控制器时,如果用户需要访问这些功能的权限,则会引发 403 错误。以上是关于Cakephp 3.4 AJAX 请求抛出 403 禁止错误的主要内容,如果未能解决你的问题,请参考以下文章
CodeIgniter REST API 库 Ajax PUT 抛出 403 Forbidden
如何在 Ajax(Post) 请求期间抛出自定义 http 状态码
cakephp - ajax 请求和操作“编辑”不能同时工作