今回はCodeIgniter4でCORSを許可する方法を紹介します。
主にREST APIの構築をする場面で躓くことの多いCORS Policyの設定をCodeIgniter4で行っていきます。
そもそもCORSって何?という方は下記の記事から読んでいただけると幸いです。
また、CodeIgniter4の初期設定については下記の記事を参照ください。
1.CORSの設定プログラムを作成する
まず、app/filterフォルダに「Cors.php」を作成します。
次に下記のプログラムを記述します。
<?php
namespace App\Filters;
use CodeIgniter\Filters\FilterInterface;
use CodeIgniter\HTTP\RequestInterface;
use CodeIgniter\HTTP\ResponseInterface;
class Cors implements FilterInterface
{
/**
* Do whatever processing this filter needs to do.
* By default it should not return anything during
* normal execution. However, when an abnormal state
* is found, it should return an instance of
* CodeIgniter\HTTP\Response. If it does, script
* execution will end and that Response will be
* sent back to the client, allowing for error pages,
* redirects, etc.
*
* @param RequestInterface $request
* @param array|null $arguments
*
* @return mixed
*/
public function before(RequestInterface $request, $arguments = null)
{
header("Access-Control-Allow-Origin: *");
header("Access-Control-Allow-Headers: X-API-KEY, Origin,X-Requested-With, Content-Type, Accept, Access-Control-Requested-Method, Authorization");
header("Access-Control-Allow-Methods: GET, POST, OPTIONS, PATCH, PUT, DELETE");
$method = $_SERVER['REQUEST_METHOD'];
if($method == "OPTIONS"){
die();
}
}
/**
* Allows After filters to inspect and modify the response
* object as needed. This method does not allow any way
* to stop execution of other after filters, short of
* throwing an Exception or Error.
*
* @param RequestInterface $request
* @param ResponseInterface $response
* @param array|null $arguments
*
* @return mixed
*/
public function after(RequestInterface $request, ResponseInterface $response, $arguments = null)
{
//
}
}
2.Filterの設定を行う
/app/Config/Filter.phpを開き、下記の記述を追加します。
use App\Filters\Cors; // 追加
//中略
public $aliases = [
'csrf' => CSRF::class,
'toolbar' => DebugToolbar::class,
'honeypot' => Honeypot::class,
'cors' => Cors::class, // 追加
];
//中略
public $globals = [
'before' => [
// 'honeypot',
// 'csrf',
'cors' // 追加
],
'after' => [
'toolbar',
// 'honeypot',
],
];
これでCORSを許可することができました。
よりCORS Policyをプログラムを書いてみて、カスタマイズしてみてください。
~参考サイト~
How To Enable CORS in CodeIgniter 4 for REST APIs
How To Enable CORS in CodeIgniter 4 for REST APIs Tutorial. CORS setup tutorial. Enabling CORS for REST APIs in CodeIgniter. How to configure CORS. Step-by-step...
~画像出展元~