CakePHPでベーシック認証を使うなら、Securityコンポーネントが超便利 ITかあさん

ITかあさん

CakePHPでベーシック認証を使うなら、Securityコンポーネントが超便利

CakePHPでベーシック認証を使うなら、Securityコンポーネントが超便利

え?CakePHPって最初からベーシック認証のコンポーネントがあるの?

どうやらあるみたいですね。Caker歴2年ちょい。今日まで知りませんでしたのでメモ。

appフォルダ直下app_controoer.php

app_controoer.phpは無ければ作ってください。appフォルダの直下ですよ。

class AppController extends Controller
  {
  
  var $components = array('Security');//Securityコンポーネントの呼び出し
  
  //beforeFilterで最初にこの処理を実行する
  //今回だと、最初にベーシック認証を指定する
  function beforeFilter()
  {
  parent :: beforeFilter();
 $this->Security->loginOptions = array('type'=>'basic');
  $this->Security->loginUsers = array('ユーザー名'=>'パスワード');
  $this->Security->requireLogin(array('Hoge'=>'index'));//Hoge_controller.phpのindex function にベーシック認証をかける
  //$this->Security->requireLogin('*'); アスタリスクで全てのcontrollerとfunctionにベーシック認証をかける 
  }
  }

開発途中でまだ誰にも見せたくない場合は全体にベーシック認証をかけるのもいいし、
マスター管理画面を簡易的に持たせるなら、マスター管理のcontrollerにだけ、ベーシック認証をかけるのもいいと思います。

一部訂正

CakePHPで作られたアプリケーション内全てをベーシック認証をかけるなら、以下で問題ないですが、

class AppController extends Controller
  {
  var $components = array('Security');//Securityコンポーネントの呼び出し
  //beforeFilterで最初にこの処理を実行する
  //今回だと、最初にベーシック認証を指定する
  function beforeFilter()
  {
  parent :: beforeFilter();
 $this->Security->loginOptions = array('type'=>'basic');
  $this->Security->loginUsers = array('ユーザー名'=>'パスワード');
  $this->Security->requireLogin('*'); アスタリスクで全てのcontrollerとfunctionにベーシック認証をかける 
  }
  }

マスター管理など、CakePHPのアプリケーションのうち、特定のコントローラー内だけこのベーシック認証かけるなら、app直下のapp_controller.phpに記述するのではなく、ベーシック認証をかけたいコントローラーだけに直接書きます。

例:マスター管理admins_controller.phpにだけベーシック認証をかける

つい忘れがちなのですが、class AdminsController extends AppControllerとなっているように、通常のコントローラーはAppControllerのextends(拡張)であるので、AppControllerに書けることは、通常のコントローラーにも書くことが出来るのです。

class AdminsController extends AppController {
  var $components = array('Security');
  var $uses = array();
 function beforeFilter() {
  
  $this->Security->loginOptions = array(
  'type'=>'basic'
  );
  
  $this->Security->loginUsers = array(
  'ユーザー名'=>'パスワード'
  );
  
  $this->Security->requireLogin();
  
  }
}

ある単体のコントローラーに対してベーシック認証を入れるならこちらが正解でしょう。

Security コンポーネントを使うと、formにワンタイムトークンがhiddenで入る

こちらのページを見るまで気がつかなかったのですが、確かに自動で入っているようです。

<div style="display:none;"> <input type="hidden" name="key" value="d2743d9299948ad1c47d3675377a41ed8c7ae33c" id="Token836315228" /> </div>

私はこのトークンが入ったからと言って 特に不具合は発生しなかったのですが、もしこのトークンによる不具合が発生した場合、

先ほどの function beforeFilter()の中にこちらを書き加えてトークンの生成を止めさせることも出来るそうです。

$this->Security->validatePost = false; 
初夏のJavaScript祭 in サーキュレーションビル ForPro