CakePHPの案件で一時的に特定のページ以下にBasic認証を付けたいという要望があって対応したのですが、CakePHP2系からはSecurityコンポーネントを使ったベーシック認証が廃止されたんですね。
2系では基本的にデータベースを利用してユーザ管理し、その情報を利用してAuthコンポーネントで実装するようです。
認証 ? CakePHP Cookbook 2.x ドキュメント
。。。面倒。
というわけで、コンポーネントを利用せず、PHPで直接書いてみました。
コンポーネントを利用せずにBasic認証を実装する
対象のコントローラやアクションに直接記述します。
// パスワードはConfigureとか定数とかクラス変数などで定義するといいと思います。 // ここでは変数で書いちゃいます。 $loginId = 'hoge'; $loginPassword = 'fuga'; $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を切ってます。
ベーシック認証はセキュリティが甘いので、恒久的な認証には向かないし、平文でIDパスワードが送信されないようにSSL下で使うのが好ましいでしょう。
参考にさせていただいたサイト
PHPでBasic認証設定してみた【PHP】 – 麹町で働くWebエンジニアのメモ帳