CakePHPのログイン実装

規約から外れた場合のログイン実装

CakePHP はユーザーのログイン処理が$this->Auth->login()みたいに簡単に書けるのだけど、規約から外れた場合、例えばユーザーテーブル名がUserでなかった場合にどうすればいいのかを調べた。

Webアプリ開発を加速する CakePHP2定番レシピ119

AuthComponent を使う

やりかたは簡単でAuthComponentの設定をちょこっと書き換えてあげるだけだ。

認証の種類には以下の3種類がある。

  • FormAuthenticate
  • BasicAuthenticate
  • DigestAuthenticate

ここではブラウザのフォームからPOSTされたデータとDBに格納されたユーザー情報の認証を行いたいのでFormAuthenticateを用いる。 デフォルトで AuthComponentFormAuthenticate を使用する。

で、AuthComponent はデフォルトでUser という名前のテーブルの usernamepasswordを参照しに行く。

定義は /lib/Cake/Controller/Component/Auth/BaseAuthenticate.phpにある。

CakePHP のAuthComponentの $settings

これはCakePHPの規約によるものだが、実際のアプリケーションはこのような構造でない場合もある。

なので適宜書き換えていく必要がある。

例えば、ログイン時に参照するテーブル名がStaffで、IDがemailというカラム名である場合 適当なContorollerに

gist0ee1a770980863cd22a9

と記述すればよい。 指定しなければデフォルトの値(BaseAuthenticate.php)が使われる。 この場合、'password' => 'password'はデフォルトと同じ値なので書いても書かなくても同じだ。

あとは対象のContorollerに以下のように書けばよい。

gist83036d80632271f36852

もちろん、Viewを用意する必要があるがここでは省略する。 Webアプリ開発を加速する CakePHP2定番レシピ119だとサンプルコードにきちんとViewの書き方からなにからなにまできちんと説明してあってオススメである。

[参考]

認証 — CakePHP Cookbook 2.x ドキュメント

CAKEPHP2.3でAUTHコンポーネント使ってログイン機能実装

Webアプリ開発を加速する CakePHP2定番レシピ119