株式会社プロネット

 

WEBシステム開発、ITコンサルティング、自社サービス、教育事業 - これからのビジネスへのIT活用ソリューションをご提案致します。

CakePHPでコントローラー毎にBasic認証を設定する方法

2015.1.8(Thu) 18:45 | CakePHP | oshima

CakePHPでコントローラー毎に異なるBasic認証を設定したい場合に便利な方法です。
CakePHP2系ではSecurityコンポーネントによるBasic認証が使えないのでPHPで行います。

環境

PHP:5.3.3 CakePHP:2.4.6

設定方法

.htaccessは使用せずに認証をかけたいコントローラーのbeforeFilter()に直接記述します。

class SampleController extends AppController {
 
    public function beforeFilter() {
        parent::beforeFilter();
         
        //Basic認証 
     $this->autoRender = false;
 
        $loginId = 'hoge';
        $loginPassword = 'hogehoge'; 
        if (!isset($_SERVER['PHP_AUTH_USER'])) {
            header('WWW-Authenticate: Basic realm="Please enter your ID and password"');
            header('HTTP/1.0 401 Unauthorized');
            die("id / password Required");
        } else {
            if ($_SERVER['PHP_AUTH_USER'] != $loginId || $_SERVER['PHP_AUTH_PW'] != $loginPassword) {
                header('WWW-Authenticate: Basic realm="Please enter your ID and password"');
                header('HTTP/1.0 401 Unauthorized');
                die("Invalid id / password combination.  Please try again");
            }
        }
 
     $this->autoRender = true;
    }


$loginIdがユーザー名、$loginPassword がパスワードです。
これでSampleControllerにアクセスすると認証が求められるようになります。
複数のコントローラーに設定するには、対象のコントローラーに同じ具合に記述すればOKです。