본문 바로가기
소프트웨어 개발/PHP

[코드이그나이터4] 필터(Filters) 사용법

by 인생은즐겁게 2022. 2. 14.
반응형

들어가기

코드이그나이터 필터는 인증 관련 처리를 할 때 유용하게 사용합니다.

 

1. 필터 인터페이스 생성

2. 필터 등록

3. 필터 사용

 

1. 필터 인터페이스 생성

App\Filters 폴더에 UserAuth.php 파일을 만듭니다.

 

세션 값에 ss_id가 없으면 Home으로 이동합니다.

<?php 

namespace App\Filters;


use CodeIgniter\HTTP\RequestInterface;
use CodeIgniter\HTTP\ResponseInterface;
use CodeIgniter\Filters\FilterInterface;


class UserAuth implements FilterInterface
{
    public function before(RequestInterface $request, $arguments = null)
    {
        helper('uri');
        if (!session()->get("ss_id")) { 
            return redirect()->to("/");
        }

    }

    public function after(RequestInterface $request, ResponseInterface $response, $arguments = null)
    {
        // 
    }
}

 

 

2. 필터 등록

 

App\Filters.php 파일에서 'userauth'      => \App\Filters\UserAuth::class 등록합니다.

<?php

namespace Config;

use CodeIgniter\Config\BaseConfig;
use CodeIgniter\Filters\CSRF;
use CodeIgniter\Filters\DebugToolbar;
use CodeIgniter\Filters\Honeypot;
use CodeIgniter\Filters\InvalidChars;
use CodeIgniter\Filters\SecureHeaders;

class Filters extends BaseConfig
{
    /**
     * Configures aliases for Filter classes to
     * make reading things nicer and simpler.
     *
     * @var array
     */
    public $aliases = [
        'csrf'          => CSRF::class,
        'toolbar'       => DebugToolbar::class,
        'honeypot'      => Honeypot::class,
        'invalidchars'  => InvalidChars::class,
        'secureheaders' => SecureHeaders::class,
        'userauth'      => \App\Filters\UserAuth::class
    ];

    /**
     * List of filter aliases that are always
     * applied before and after every request.
     *
     * @var array
     */
    public $globals = [
        'before' => [
            // 'honeypot',
            // 'csrf',
            // 'invalidchars',
        ],
        'after' => [
            'toolbar',
            // 'honeypot',
            // 'secureheaders',
        ],
    ];

    /**
     * List of filter aliases that works on a
     * particular HTTP method (GET, POST, etc.).
     *
     * Example:
     * 'post' => ['csrf', 'throttle']
     *
     * @var array
     */
    public $methods = [];

    /**
     * List of filter aliases that should run on any
     * before or after URI patterns.
     *
     * Example:
     * 'isLoggedIn' => ['before' => ['account/*', 'profiles/*']]
     *
     * @var array
     */
    public $filters = [];
}

 

 

 

3. 필터 사용

 

App\Routes.php 파일에서 필터를 실행할 라우트를 등록합니다. 라우트 기능을 제대로 사용하려면 

$routes->setAutoRoute(false); 로 설정해야 합니다.

$routes->get('/auth/ss_test', 'AuthTest::sess_test', ['filter' => 'userauth'] );

 

 

반응형

댓글