【CakePHP2】任意のアクションでBASIC認証する方法
CakePHP2系統で運用しているサイト(メールフォームの管理者画面)へ、BASIC認証させたいという要望が入ったので実装してみました。
次回から調査する時間を省くための備忘録としてポストしておきます。
CakePHP2系統でのBASIC認証
かなり以前ですが、1.3系統のセキュリティコンポーネントを使ったBASIC認証する方法を同じようにこのブログでもポストしていましたが、2系統ではセキュリティコンポーネントでのBASIC認証は廃止されていました。
かわりに、基底クラスの AppController へBASIC認証用のアクションを作成し、メールフォームの必要なアクションからBASIC認証用のアクションを起動するという方式を採用しました。
BASIC認証用コード
下記コードを AppController.php へ記述します。
$loginId と $loginPassword は別途、bootstrap.php へ定義することとします。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
public function _basicAuthentication() { $loginId = BASICAUTH_ID; $loginPassword = BASICAUTH_PW; $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; } |
↑ AppController.php へ追加
1 2 3 |
// 検索画面用BASIC認証 define('BASICAUTH_ID', 'hoge'); define('BASICAUTH_PW', 'passwordtext'); |
↑ bootstrap.php へ、IDとPWを定義する
使い方
下記のように、BASIC認証させたいページ(アクション)にて、_basicAuthentication アクションをコールするだけです。
使いたいアクション全部に埋める必要があるのが難点ですが。。。
1 2 3 4 5 6 7 8 9 10 11 12 |
/** * 検索画面(BASIC認証あり) * */ function search() { // AppControllerにあるBASIC認証用アクションをコールする $this->_basicAuthentication(); // htmlタイトル $this->set('title_for_layout', '検索'); } |
結果
↑ Google Chromeのパスワードウィンドウ
↑ 認証に失敗すると、設定したメッセージが表示されます