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