CakePHP

CakePHP2.xで、Authコンポーネントを使って簡単認証する方法。

2019/12/10

CakePHP2.x(2.3.6)でAuthコンポーネントを使い、認証させる方法をポストします。
以前紹介した、CakePHP2.x及びDebugKitのインストールとともに初期状態をさくっと作るための忘備録です。

セッションの設定

ログイン関連にはセッションを使用するので、セッション関係の設定を行います。
app/Config/core.php の190行目付近変更します。

いくつか前のポストにもあるように単位が「秒」ではなく「分」って事に注意して設定します。
「セッションの保存先を、データベースにするよ」という設定です。
1440(分)は一日って意味です。

編集前

編集後

テーブル作成

次に、セッションをデータベースに保存するって設定を行ったので、各種テーブルを作成します。

1.セッション保存用テーブル

2.ユーザ用テーブル

次にユーザ用テーブル。
Authコンポーネントでは、『id』『username』『password』が最低限必要なカラムとなるので、それらを含んだテーブルを作成します。

コントローラー作成

では、コントローラーを作っていきます。
全部載せるのはちと面倒なので、重要なところだけ。

AppController

基底ファイルである AppController にコンポーネント設定を書き、全てのページに反映させます。
ハイライトされているところが、Authコンポーネント設定です。

beforeFilter() にある

にて、ログイン中のユーザ情報を取得、セットするようにしています。

app/Controller/AppController.php

(2014.02.19追記)
下で説明している「Adminルーティング」を使用し、管理者用ログイン画面のURLを

としたい場合は、Appコントローラーのコンポーネント設定の「ログインページのパス」へ

を設定するとうまくいくようです。

更に追記です。
(1)削除済みのユーザに関してはログインさせたくない等の条件
(2)デフォルトではusername と passwordの判定だが、メールアドレスにて判定したい
の条件が必要になった場合は、下記の設定を追加すると幸せになれます。

(追記ここまで)

UsersController

とりあえず、beforeFilter()、admin_login()、admin_logout()だけ。
"admin_"はプレフィックスを付けて管理画面とする、Adminルーティングてやつです。
詳しくは以前のポスト(CakePHP2.x で Admin Routing する方法。)を参照してください。

見ればわかると思いますが、特に目新しいことはしていません。

CakePHPの仕様で、AppControllerで beforeFilter() を指定している場合は、各コントローラーでも beforeFilter() が必要になるので、そのようにしています。

ログイン、ログアウトは非常に簡潔なルーチンで作成可能です。お手軽ですね。

略していますが、これ以外のアクションとしては(ごく普通に)ユーザの一覧、追加、修正、削除、インデックスページなどがあると思うので、それぞれ作成してください。

app/Controller/UsersController.php

ビューの作成

と、あとは必要なビューとモデルを適当(適切)に作っていけば出来上がります。

新規ユーザ登録フォーム

このページは、ユーザが居ない初期状態の場合は認証なしで表示するよう、UsersController の beforeFilter() で設定しています。

app/View/Users/admin_add.ctp

ログインフォーム

app/View/Users/admin_login.ctp

ログアウト後ページ

app/View/Users/admin_logout.ctp

indexページ

必要かどうかは分かりませんが、ログインしている人の情報を表示するページとします。

app/View/Users/admin_index.ctp

モデルの作成

最後に、ユーザ登録時のバリデーションを行うモデルを作成します。

app/Model/User.php

以上で、最低限ユーザ認証させるページが出来上がりました。
以下は、順を追ったスクリーンショットです。

スクリーンショット

1. 初期ユーザを登録

/admin/users/add で、初期ユーザを登録します。

AuthComponent画面1

2. ログイン画面

admin/users/login

AuthComponent画面2

3. ログイン後画面(INDEX)

ログイン後は、インデックスページヘリダイレクトするようにしたので、インデックスページを表示します。

AuthComponent画面3

ログアウト後は、ログインページが表示されるはずです。

と、かなり早足でしたが、Authコンポーネントを用いた、認証システムの作成方法でした。

[tgAmazonItemLookup asin="B00AXTVWEG" related="1"]

-CakePHP
-, ,