ちょっとハマった…
絶賛稼働中の密かなサイトが、PCメインなシステムだったので、
.htaccess にとりあえず書いて配下全体をBASIC認証で守ってたけど、
どーしても携帯対応させる必要が出てきた。
携帯で毎回BASIC認証の情報入れるのはありえないだろうということで、色々調べてたら
Cake標準のSecurityコンポーネントで簡単にBASIC認証掛けられるぜ!というページが多々あったので、
一部のコントローラのみ認証をかける方向に切り替えようとした…が ちょっとハマったので備忘録。
基本的な使い方はこう。
認証掛けたいコントローラ内部に
$component = array('Security');
を記載。
コントローラの beforeFilter部分に以下を記載すれば、とりあえずBASIC認証のダイアログが。
function beforeFilter() { $this->Security->loginOptions = array('type'=>'basic'); $this->Security->loginUsers = array('ユーザ名'=>'パスワード'); $this->Security->requireLogin('*'); }
requireLogin の * は 全コントローラ対象という意味。
よーしこれで一気にたたみかけるぜ!…とおもって Ajax使ったフォームからPOST投げると真っ白な画面に陥る…orz
Security コンポーネントを導入すると、フォームに自動的にhiddenでワンタイムトークンを入れてくれるらしい。
そして、また自動でトークンチェックして、不適合の場合には真っ白な画面がお出迎えしてくれる。
※正確には$security->blackHoleで指定したメソッドが実行される。定義してないので真っ白画面がお出迎え。
なんてお節介便利なやつ!
多機能すぎて何が起こってるかわかりにくいぜ!
とはいえ、すでに自前でチェックしてるルーチンがあるので、先述の beforeFilter に
$this->Security->validatePost = false;
を書き加えると POST のトークンチェックをしなくなって無事動作。
ちょっと古い記事だけど基本的方向性は同じなので助かりました!
CakePHP Security コンポーネントのまとめ | Sun Limited Mt.
CakePHP Security コンポーネントのまとめ | Sun Limited Mt.
ログイン処理とかは 昔に見つけたobAuthコンポーネントを未だにつかってたりするんだけど、
こっちのSecurity コンポーネントに切り替えていきたいなあと思いつつ未だに抜けきれない。