スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

[CakePHP] 特定のアクションを https: によるアクセスに限定にする方法

CakePHPアプリにおいて、例えばログインなどの画面に対して https: でのアクセスを強制したい場合がある。

標準コンポーネントのひとつ、SecurityComponent を使うと、それが実現できるということが分った。

ちなみに、SecurityComponent では、GETではなくPOSTでのアクセスを強制させるとか、
その他いくつかのアクセス手段を強制することができるようだ。



最低限の使い方としては、これだけだ。

class UsersController extends AppController {
var $components = array('Security', ...その他のコンポーネント);

function beforeFilter() {
parent::beforeFilter();

// https: でなかった場合に呼ばれるメソッドを登録
$this->Security->blackHoleCallback = '_forceSecure';

// https: 強制したいアクションを指定
$this->Security->requireSecure('login', 'edit');
}

// https: でない場合に呼ばれる。
// $param には "secure" という文字列が入ってくる。requireSecure() 以外の制限も設定した場合は、
// どの条件に引っかかったのか、この文字列で判断できる。
function _forceSecure($param) {
// 404 エラーにしてしまうという方針もあるが、
// ここでは同じURLにリダイレクトして https: でアクセスするようにしている。
// ちなみに、$this->Security->blackHoleCallback = '_forceSecure'; の登録を
// 行わなければ、自動的に 404 エラーにしてくれるようだ。
$this->redirect('https://' . env('SERVER_NAME') . $this->here);
}
}


Security->requireSecure() のパラメータを指定しないと、コントローラ全体に対して
https: が強制されるようだ。


おしまい。
スポンサーサイト
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。