Php 休息控制器cors不工作(代码点火器)

Php 休息控制器cors不工作(代码点火器),php,node.js,rest,codeigniter,nginx,Php,Node.js,Rest,Codeigniter,Nginx,我需要一些帮助,因为这个问题困扰了我好几天,我不知道如何进一步处理。我正在使用VueJs2和Codeigniter(Rest控制器)作为API开发我的应用程序。 我正在使用节点web包服务器(npm run dev),因此我的首页应用程序可以在上运行。此应用程序正在向我的Codeigniter应用程序发出请求(我使用的是nginx虚拟主机,因此我可以在我的主机上访问我的API) 问题如下。 我的VueJs应用程序正在使用一些自定义头从发出GET请求 this.$http.get(this.$ap

我需要一些帮助,因为这个问题困扰了我好几天,我不知道如何进一步处理。我正在使用VueJs2和Codeigniter(Rest控制器)作为API开发我的应用程序。 我正在使用节点web包服务器(npm run dev),因此我的首页应用程序可以在上运行。此应用程序正在向我的Codeigniter应用程序发出请求(我使用的是nginx虚拟主机,因此我可以在我的主机上访问我的API)

问题如下。 我的VueJs应用程序正在使用一些自定义头从发出GET请求

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',
];
这是我的控制器,用于获取用户

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(我假设这是飞行前请求),它失败了)

所以假设CORS出了问题,我已经启用了和上面相同的设置,但问题仍然存在

$config['check_cors'] = TRUE;
我看到的唯一区别是,响应头现在允许所有方法和头,但get请求不执行

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

这是我的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' '*';
}
如果我让我的控制器看起来像这样,如果我从nginx.conf中删除add_头行,那么我的代码“正在工作”。首先发出选项请求(失败),然后发出get请求(正常)

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();
    }

谁能帮我一下吗?我不知道我还需要做什么,这样我就可以从API请求资源了


如果您需要任何其他信息,请让我知道,我会提供。谢谢大家!

要解决CORS问题,请将其添加到Rest控制器中

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();
        }
    }
}

因为您需要对所有选项请求做出反应,而不仅仅是索引选项。

要解决CORS问题,请将其添加到您的Rest控制器中

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();
        }
    }
}
因为您需要对所有选项请求做出反应,而不仅仅是索引选项