gpt4 book ai didi

php - REST_CONTROLLER cors 不工作(Codeigniter)

转载 作者:太空宇宙 更新时间:2023-11-04 03:22:24 32 4
gpt4 key购买 nike

我需要一些帮助,因为这个问题困扰了我好几天,我不知道如何进一步进行。我正在使用 VueJs2 和 Codeigniter(Rest Controller )作为 API 来开发我的应用程序。我正在使用 Node web-pack 服务器(npm run dev),因此我的首页应用程序在 http://localhost:8080 上运行。此应用程序正在向我的 Codeigniter 应用程序发出请求(我正在使用 nginx 虚拟主机,因此我可以在 http://myapp.test 上访问我的 api)

问题如下。我的 VueJs 应用程序正在从 http://localhost:8080 发出 GET 请求,带有一些自定义 header

this.$http.get(this.$apiUrl + `rest/api/public/User/user/` + payload.id_user, {
// if i remove this custom header, everything works ok!
headers: {
jwttoken: token
}
})

这是我关于 CORS 的rest.php 配置

$config['check_cors'] = FALSE;
$config['allowed_cors_headers'] = [
'Origin',
'X-Requested-With',
'Content-Type',
'Accept',
'Jwt-token',
'jwttoken'
];
$config['allow_any_cors_domain'] = TRUE;
$config['allowed_cors_origins'] = [
'http://localhost:8080',
];

这是我的 Controller ,用于获取用户

class User extends REST_Controller {
public function user_get($id) {
$this->response([
'status' => true,
'data' => 'data'
], REST_Controller::HTTP_OK);
}
}

这个请求的结果是 405 Method not allowed (因为请求的方法是 OPTIONS (我假设这是飞行前请求),这是失败的) enter image description here

因此,假设 CORS 有问题,我已使用与上面所见相同的设置启用它,但问题仍然存在。

$config['check_cors'] = TRUE;

我看到的唯一区别是,响应 header 现在允许所有方法和 header ,但获取请求不执行

Access-Control-Allow-Headers:*
Access-Control-Allow-Methods:*
Access-Control-Allow-Origin:*

enter image description here

这是我的 php nginx 配置

location /rest {
index /rest/index.php;
try_files $uri $uri/ /rest/index.php;

add_header 'Access-Control-Allow-Origin' '*';
add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS, PUT, PATCH, DELETE';
add_header 'Access-Control-Allow-Headers' '*';
}

location ~ \.php$ {
try_files $uri =404;
fastcgi_pass unix:/Applications/MAMP/Library/logs/fastcgi/nginxFastCGI.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param WORKING_ENVIRONMENT dev;
include fastcgi_params;
add_header 'Access-Control-Allow-Origin' '*';
add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS, PUT, PATCH, DELETE';
add_header 'Access-Control-Allow-Headers' '*';
}

如果我让我的 Controller 看起来像这样,并且如果我从 nginx.conf 中删除 add_header 行,那么我的代码“正在工作”。首先发出选项请求(失败),然后发出获取请求,这是正常的

class User extends REST_Controller {
public function user_get($id) {
$this->getUser();
}
public function user_options() {
$this->getUser();
}
private function getUser($id) {
var_export($id);
var_dump('test');
die();
}

enter image description here

有人可以帮帮我吗?我不知道我还需要做什么才能从 http://localhost:8080 请求资源到我的http://myapp.test API

如果您需要任何其他信息,请告诉我,我会提供。谢谢!

最佳答案

要解决 CORS 问题,请将其添加到您的 Rest-Controller

class My_Rest_controller extends REST_Controller
{
public function __construct($config = 'rest')
{
parent::__construct($config);

header('Access-Control-Allow-Origin: *');
header("Access-Control-Allow-Headers: X-API-KEY, Origin, X-Requested-With, Content-Type, Accept, Access-Control-Request-Method, Authorization");
header("Access-Control-Allow-Methods: GET, POST, OPTIONS, PUT, DELETE");
$method = $_SERVER['REQUEST_METHOD'];
if ($method == "OPTIONS") {
die();
}
}
}

因为您需要对所有 OPTIONS 请求使用react,而不仅仅是对 index_options 使用react。

关于php - REST_CONTROLLER cors 不工作(Codeigniter),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48678764/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com