CakePHP Security コンポーネントでBASIC認証をかけてみてハマる

ちょっとハマった…

絶賛稼働中の密かなサイトが、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 コンポーネントに切り替えていきたいなあと思いつつ未だに抜けきれない。

コメントを残す

メールアドレスが公開されることはありません。