もふもふ技術部

CakePHPでユーザ認証機能を使う


概要

ユーザ名とパスワードを入力して認証し、認証してないリクエストは弾くようなページを作る。

下記のページを参考にした。
http://book.cakephp.org/2.0/ja/tutorials-and-examples/blog-auth-example/auth.html

前提条件

BakeでUsersテーブルに対するCRUDな機能を備えたページを作成済みであるものとする。詳細は前回の記事参照。

ユーザの用意

前回作成したページにリクエストして、ログインする際に使うユーザを1つ設定しておく。設定しておかないと、入れなくなるので。
http://localhost/users/

名前とパスワードは半角英数で入力し、Roleはadminを入力しておく。

認証機能の用意(Controller編)

Controllerの継承元であるAppControllerにAuthを設定して、loginとlogout後のリダイレクト先を指定する。下記例ではloginしたらusersのindexに、logoutしたらusersのloginに飛ばす。

UsersController.phpにログイン機能とログアウトを実装する。

このままだとパスワードは平文で保存されてしまうので、Modelに下記のようなハッシュ化のフィルタをbeforeSaveに書く。

ログイン時にDBを検索する際は、自動でハッシュ値にして検索してくれるらしい。

認証機能の用意(View編)

ログイン画面のviewを用意する。「app/View/Users/login.ctp」に下記のようなViewを記述。

これでlocalhostにリクエストすると、上記のViewが表示されるようになった。

下記のURLにリクエストしてみて、ログインしたりでできるか確認してみる。
http://localhost/users

うっかりハッシュ化機能を入れる前にユーザ登録をしてしまったので、パスワードが一致せずログインできなかった。。。

画面の下部にSQLのデバッグ文が出ていて、そこにハッシュ化されたパスワードも表示されるので、データベースのパスワードをUPDATE文でそのハッシュ値に変更してやったらログインできた。

ログアウトする際は下記URL。
http://localhost/users/logout

一部のリクエストを許可したい場合

たとえば「追加、更新機能は認証が必要だけど、表示機能は認証いらない」という場合は、ControllerのbeforeFilterで許可する子を設定してあげれば良いらしい。

今回の例では、UsersControlerに以下のようなフィルタを追加する。

これで一覧と単品表示の機能はログインしなくても見れるようになった。追加や更新ページヘ行こうとすると認証を求められる。

The following two tabs change content below.
masato watanabe

masato watanabe

もふもふ部ブレーン。プログラマ兼ライター。

One thought on “CakePHPでユーザ認証機能を使う

  1. Pingback: CakePHP 認証関連の参考になった記事 | No:1076 |