14時の間食

CakePHPの記事を中心にWeb制作について

CakePHP2.xでSSL接続(https://)を強制させる

CakePHP

利用するのはSecurityコンポーネント。 CakePHPにもともと備わっているコンポーネントなので他所からのDLなどは一切不要です。

コントローラーに数行記述するだけ。

このお手軽さ。まずは、SSL接続を強制したいアクションのあるコントローラーで、Securityコンポーネントの使用を宣言します。

public $components = array('Security');

beforeFilter内に以下の記述を追加します。
ここではif文を使い、アクションがindexの時のみSSL接続が強制されるように設定しています。
コントローラー内の全てのアクションにSSL接続を強制したい時はこのif文は取り払って下さい。

public  function beforeFilter(){

    //indexのみSSL接続を強制
    if ($this->action === 'index') {
        $this->Security->blackHoleCallback = 'forceSSL';
        $this->Security->requireSecure();
    }
}

最後にforceSSLメソッドを追加します。このままコピペでOK。

public function forceSSL() {
    $this->redirect('https://' . env('SERVER_NAME') . $this->here);
}

以上をまとめるとこんな感じ。↓

class HogesController extends AppController {

    public $components = array('Security');

    public  function beforeFilter(){

        //SSLを強制するアクションを設定
        if ($this->action == 'index') { //←アクション名がindexの時だけSSL接続を強制
            $this->Security->blackHoleCallback = 'forceSSL';
            $this->Security->requireSecure();
        }
    }
    public function forceSSL() {
        $this->redirect('https://' . env('SERVER_NAME') . $this->here);
    }

    public function index() {

    }
}

SSLを使わないページにはむしろhttp://を強制したい…という場合

このままだと、https://のページからのリンクは絶対パスで「http://」と指定しない限り全てhttps://になってしまいます。
SSLが必要ないページでSSL接続を解除したい場合は、_unforceSSL()などといったメソッド作ってSSLが不要のアクションにhttps://でアクセスが来た時に実行されるようにします。
以下明滅している部分が、追加したコードです。

class HogesController extends AppController {

    public $components = array('Security');

    public  function beforeFilter(){

        //SSLを強制するアクションを設定
        if ($this->action == 'index') { //←アクション名がindexの時はSSL接続を強制
            $this->Security->blackHoleCallback = 'forceSSL';
            $this->Security->requireSecure();
        }elseif(env('HTTPS')){ //←アクション名がindex以外なのにURLがhttps://だったらhttp://にリダイレクト//+
            $this->_unforceSSL();//+
        }//+
    }
    public function forceSSL() {
        $this->redirect('https://' . env('SERVER_NAME') . $this->here);
    }
    public function _unforceSSL() {//+
        $this->redirect('http://' . env('SERVER_NAME') . $this->here);//+
    }//+

    public function index() {

    }
}

※参考記事はこちら
http://book.cakephp.org/2.0/en/core-libraries/components/security-component.html

カテゴリー

最近の記事

Author

  • ささきち-このブログを書いてる人
    s3make@ささきち
    多摩川沿いに住むフリーのWebデザイナーです。近所のイオンによく行きます。