【備忘録】CodeIgniter4でCORSを許可する方法

CodeIgniter

  今回は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...

~画像出展元~

Technology illustrations by Storyset

タイトルとURLをコピーしました