Calendar

<< 8月 >>
 123456
78910111213
14151617181920
21222324252627
28293031  

Mobile

  • 2系CakePHPでのBasic認証
  • 2017.08.23
  • CakePHPにはデフォルトでBasic認証が設定できる機能が搭載されております。
    ネットで調べるとSecurityコンポーネントで簡単に実装できるという記事が多数みられますが
    2系のCakePHPではエラーになってしまいます。
    2系ではSecurityコンポーネントの代わりに新しいAuthコンポーネントによって処理するそうです。

    https://book.cakephp.org/2.0/ja/appendices/2-0-migration-guide.html

    このAuthコンポーネントですが、usersテーブルを作ったり色々と面倒です。
    しかもusersテーブルを別の機能で既に作成してしまって使用しているため
    Authコンポーネント用のusersテーブルが作成できない事情もあり、別の方法で対処しました。

    コントローラ内の全てのアクションにBasic認証を設定したいなら
    beforeFilter内に下記の記述を記載するだけ。
    IDとパスワードは使いまわしができるように外部ファイルで設定しておいた
    方が利便性は良いですが、今回は直書きで・・・

    $loginId = ‘hoge’;
    $loginPassword = ‘hogehoge’;
    $this->autoRender = false;
    if (!isset($_SERVER[‘PHP_AUTH_USER’])) {
    header(‘WWW-Authenticate: Basic realm=”Private Page”‘);
    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=”Private Page”‘);
    header(‘HTTP/1.0 401 Unauthorized’);
    die(“Invalid id / password combination. Please try again”);
    }
    }
    $this->autoRender = true;

    ↑ベーシック認証が通るまではautoRenderを切ってます。

    今回、上記のソースでユーザ名とパスワードを入力するダイアログボックスは表示されたが、
    何故か認証が通らない。
    調べると$_SERVER[‘PHP_AUTH_USER’]と$_SERVER[‘PHP_AUTH_PW’]が取得できていないようでした。
    そこで、webroot配下の.htaccessに以下の3行を追記

    RewriteEngine On
    RewriteCond %{HTTP:Authorization} ^(.*)
    RewriteRule ^(.*) – [E=HTTP_AUTHORIZATION:%1]

    ちなみにapp配下の.htaccessに上記3行を追記してもダメでした。

    app
     ├.htaccess
     └webroot
       ├.htaccess

【この記事のタグ】
コメント&トラックバック(0)

▲ PAGE TOP