(CakePHP2.x) SSL常時接続の続き

CakePHP

CakePHP

以前、SSL常時接続を設定したのですが、

初めての[CakePHP2.x]での開発、そして挫折するまで日記~その23 SSL常時接続の設定

ちょっとした疑問がわいてきたので

調べてみました。

スポンサードリンク

Security コンポーネントでの設定

前回こんな感じでAppController.phpに設定したのです。

public function beforeFilter() {
  //SSL常時通信
  // HTTP でない場合に実行するメソッド名
  $this->Security->blackHoleCallback = 'forceSecure';

  //SSL接続でない場合はblackHoleを呼ぶ
  $this->Security->requireSecure();
}

この7行目のHTTPでないときに実行するメソッドとして

forceSecureというユーザー関数を使用しています。

forceSecureというユーザー関数は以下のように設定しました。

//SSL常時接続
public function forceSecure() {
  $this->redirect("https://".env('SERVER_NAME').$this->here);
}

これでSSL常時接続はできるのです。

この設定は、SSL接続でない場合に

  //SSL接続でない場合はblackHoleを呼ぶ
  $this->Security->requireSecure();

の関数によりblackHoleを呼んでくれます。

すると、blackHoleのコールバックに設定した

// HTTP でない場合に実行するメソッド名
$this->Security->blackHoleCallback = 'forceSecure';

このforceSecure関数が呼び出されて

SSL接続にリダイレクトしてくれるという設定になっています。

疑問に思ったことは、他のSecurity コンポーネントエラーは?

なんで疑問に思ったのかというと

この設定だとSecurity コンポーネントでトークンエラーも

同じページにリダイレクトされるということに気づいたんです。

別に問題ないと言えばないのかもしれません。

でも、何となく気持ち悪いな~って思いまして

設定を見直してみました。

エラーのタイプで判別

CakePHPのCookbookにエラー判別の仕方が載ってました。

Security

こうするとタイプ別でえら表示ができる

public function forceSecure($type) {
   //SSL接続でない場合
   if($type = 'secure'){
     $this->redirect("https://".env('SERVER_NAME').$this->here);
   }elseif($type = 'csrf'){
   //CSRF対策の場合
     throw new NotFoundException();//404 not found を return
   }
}

引数にエラータイプを指定すれば

エラータイプによって

動作を振り分けられます。

これでトークンエラーの際に

エラーぺージを表示させることができました。

CakePHP2 実践入門 (WEB DB PRESS plus)

新品価格
¥3,110から
(2015/1/27 23:08時点)

スポンサードリンク

コメントを残す

サブコンテンツ

このページの先頭へ