- 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
【この記事のタグ】
コメントを残す