【发布时间】:2019-01-01 15:21:20
【问题描述】:
我对 CakePHP 还很陌生,而且我已经尝试解决这个问题一段时间了。
发生的事情如下:
我基本上是在尝试使用 php POST CURL 从不同的 IP/域到 Cake 应用程序获取结果。但是,每次我这样做时,我都会在 CakePHP 应用程序日志“Missing CSRF Token Cookie”中不断收到错误消息。
我浏览了在线文档和各种帖子,但我仍然不完全理解这一点。
我希望这里有人可以更好地解释这个错误的含义。与 php 建立 CURL 连接时如何传递 CSRF 令牌?更重要的是如何获取Cake应用CSRF Token?
很抱歉,这听起来像是一个愚蠢的问题,但我真的迷路了,不知道还能去哪里找。提前感谢您的帮助。
编辑 1 我们正在尝试将数据添加到系统中,当我们执行 GET 请求时没有问题,该请求运行良好。问题来自执行 POST 请求。
编辑 2 我正在添加我的 AppController 代码和执行所有功能的其他控制器。我想要做的是让 POST 工作,这样我就可以实现添加或编辑存储在数据库中的数据的功能。
AppController.php
namespace App\Controller;
use Cake\Controller\Controller;
use Cake\Event\Event;
class AppController extends Controller
{
public function initialize()
{
parent::initialize();
$this->loadComponent('RequestHandler', [
'enableBeforeRedirect' => false,
]);
$this->loadComponent('Flash');
}
}
WebservicesController.php
namespace App\Controller;
use Cake\Event\Event;
class WebservicesController extends AppController{
protected $responseBody = [];
public function beforeRender(Event $event){
foreach($this->responseBody as $responseKey=>$response){
$this->set($responseKey, $response);
}
$this->set('_serialize', array_keys($this->responseBody));
}
public function initialize(){
parent::initialize();
$this->RequestHandler->renderAs($this, 'json');
}
public function index(){
///getting data
$this->request->allowMethod(['get']);
$id = $this->request->getQuery("id");
$this->responseBody["statusCode"] = 200;
$this->responseBody['statusDescription'] = "";
$this->responseBody['data'] = array();
}
public function getOneItem(){
$this->request->allowMethod(['post']);
if ($this->request->is('post')) {
//Add/Edit Data in here.
$id = $this->request->getQuery("id");
$this->responseBody["statusCode"] = 200;
$this->responseBody['statusDescription'] = "";
$this->responseBody['data'] = array();
}
}
}
【问题讨论】:
-
可能值得解释一下您的应用程序中请求的端点实际上做了什么。如果您只是想读取数据,那么首先不需要发出非 GET 请求(将检查 CSRF 令牌)。
-
@ndm 我已经更新了我原来的帖子,谢谢。
标签: php curl post cakephp csrf