CakePHP1.2 Security コンポーネントを使用して SSL でのみアクセスを許可する
開発案件でアクション毎に SSL でのアクセスを必須にしたかったので調べていたところ下記の情報がありました。
SSL経由でのアクセスを必須にする[CakePHP] YARETOKO「ヤレトコ」メインブログ
早速 cake/cake/libs/controller/components/security.php のソースを確認して検証してみました。
SSL でアクセスするアクションの指定
特定のアクションのみを指定したい場合
<?php class UsersController extends AppController { var $components = array('Security'); function beforeFilter() { $this->Security->requirePost('delete'); } } ?>
管理画面のみを指定したい場合
<?php class UsersController extends AppController { var $components = array('Security'); function beforeFilter() { if(isset($this->params[Configure::read('Routing.admin')])){ $this->Security->requireSecure(); } } } ?>
全てのアクションを指定したい場合
<?php class UsersController extends AppController { var $components = array('Security'); function beforeFilter() { $this->Security->requirePost(); } } ?>
エラー時の処理
SSL 以外でアクセスされた場合の処理を指定します。
<?php class UsersController extends AppController { var $components = array('Security'); function beforeFilter() { $this->Security->requirePost('delete'); $this->Security->blackHoleCallback = '_blackHole'; } function _blackHole($error) { if ($error=="secure") { // SSL でリダイレクトさせるなどの処理 exit; } } } ?>
SecurityComponent::blackHoleCallBack メンバ変数にエラー時のコールバックさせたいメソッドを指定します。
_blackHole メソッドで $error==”secure” としているのは SecurityComponent には SSL のチェック以外に、トークンチェック、ログインチェックなどもあり、全て同じコールバック関数にエラー処理がされるので条件分岐させます。
また、コールバック内で exit しないと通常実行されるアクションがその後実行されるので、実行させたくない場合は exit を入れる必要があります。
参考
Cookbook :: 1.2 Collection :: マニュアル :: 組み込みのコンポーネント :: Security Component :: Usage
コールバック関数の処理のところで書いたように Security コンポーネントのソースを見ていると結構使えそうなものがあるので時間を見つけて検証していこうと思います。
関連する投稿
コメントをどうぞ
Additional comments powered by BackType