CakePHP2 ざっくりとベーシック認証

CakePHP2.4で、見せたくないページにちょっとベーシック認証を掛けたかっただけなのに、妙にハマった。
「CakePHP2では、簡単にベーシック認証をかけれる。」らしいのに・・・。
実際、なんということはなかったが、他の認証の情報とか、CakePHP1と勘違いしたりで、ハマった。

さて、CakePHP2でのベーシック認証だが、ステップは以下のとおり。

  1. データベースにusersテーブルを作る。
  2. usersテーブルに対応したUserモデルを作る。
  3. Userモデルに対応したUsersContollerを作って、ユーザーを作る。
  4. 見せたくないページにAuthコンポーネントでBasicをかける。

とりあえず、手順をざっくり記述していく。

1.データベースにusersテーブルを作る。

こんなかんじかな。

カラム名は特に理由がないかぎり変更せずに、usernameとpasswordでにしておくと良い。
createdとmodifedも、とりあえず一緒つけとけばCakeが勝手に使うので、入れおく。

これで、ユーザーを管理するテーブルを作る。

2.usersテーブルに対応したUserモデルを作る。

さて、次に対応するモデルを作る。

こんな感じ。

パスワードをデータベースにそのまま保存せずに、暗号化(ハッシュ化)して保存する。
AuthComponent::password を使えば、ハッシュ化されてパスワードは保存される。

 

3.Userモデルに対応したUsersContollerを作って、ユーザーを作る。

さて、次にログインするユーザーを作成するために、Userモデルを扱うコントローラーを作成する。

ユーザーがいないとそもそもログインできないしね。

以下の様なコントローラーを作る。

Userモデルを扱うUsersControllerを作成し、変数名$scaffoldを宣言。
あとは、このコントローラーにアクセスすれば、usersテーブルを扱う諸々ができているはずなので、そこでユーザーを作成する。

 

4.見せたくないページにAuthコンポーネントでBasicをかける。

さて、いよいよ本題になる。

ベーシック認証をかけたいページに、Authコンポーネントを読み込みんで、beforeFilterで割り付ける。

これで、Hogeコントローラーにはベーシック認証がかかる。

サイト全体にかけたければ、AppControllerのbeforeFilterに同じように書けば良い。

もし、基本見せてもいいが、管理ページは見せたくないって場合は、

こんな風に、AppControllerを継承してもう一つ作ったものを継承したコントローラーにすればよいと思う・・・。
(他に、やり方あるらしいけど。)

ちなみに、ベーシック認証は平文でパスワードを送るらしいので、送信経由で盗聴されると、そのままパスワードが見られるらしい。
まぁ、多くの人が、ドアが閉まってればガラスを割って入ろうとは思わないので、ないよりはマシだと思う。

Leave a Reply

Your email address will not be published.

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">