CakePHPのログイン実装
規約から外れた場合のログイン実装
CakePHP はユーザーのログイン処理が$this->Auth->login()
みたいに簡単に書けるのだけど、規約から外れた場合、例えばユーザーテーブル名がUser
でなかった場合にどうすればいいのかを調べた。
AuthComponent を使う
やりかたは簡単でAuthComponent
の設定をちょこっと書き換えてあげるだけだ。
認証の種類には以下の3種類がある。
- FormAuthenticate
- BasicAuthenticate
- DigestAuthenticate
ここではブラウザのフォームからPOSTされたデータとDBに格納されたユーザー情報の認証を行いたいのでFormAuthenticate
を用いる。
デフォルトで AuthComponent
は FormAuthenticate
を使用する。
で、AuthComponent
はデフォルトでUser という名前のテーブルの username
と password
を参照しに行く。
定義は /lib/Cake/Controller/Component/Auth/BaseAuthenticate.php
にある。
CakePHP のAuthComponentの $settings
これはCakePHPの規約によるものだが、実際のアプリケーションはこのような構造でない場合もある。
なので適宜書き換えていく必要がある。
例えば、ログイン時に参照するテーブル名がStaff
で、IDがemail
というカラム名である場合
適当なContorollerに
と記述すればよい。
指定しなければデフォルトの値(BaseAuthenticate.php
)が使われる。
この場合、'password' => 'password'
はデフォルトと同じ値なので書いても書かなくても同じだ。
あとは対象のContorollerに以下のように書けばよい。
もちろん、Viewを用意する必要があるがここでは省略する。 Webアプリ開発を加速する CakePHP2定番レシピ119だとサンプルコードにきちんとViewの書き方からなにからなにまできちんと説明してあってオススメである。
[参考]
認証 — CakePHP Cookbook 2.x ドキュメント