skillup

技術ブログ

PHP

cakePHPの認証-Authコンポーネント

投稿日:2015年10月26日 更新日:

ひさびさにPHPをやる機会があり、短期での開発だったため、cakePHPを使いました。

以前やったことがあったんですが、もう2年以上たっていますね。

といいつつも昔のソースを見ながらやることで思い出しましたし、ここ2日ぐらいしか触っていませんが、以前よりもソースがきれいに書けるようになってますね。

基本的なことは割愛し、認証部分について書きたいと思います。versionは2.5です。

特別なライブラリのインポートとかはいらないです。

モデルの定義

モデル名はなんでもいいんですけどテーブル名がUsers、ユーザー名とパスワードをusername,passwordにしておくとパラメータの変更がいらないので楽でしょう。

もちろんこれ以外のテーブル名やカラム名でも認証機能は使えます。

以下のソースの例ですがテーブル名admins,ユーザー名相当フィールドはusername、パスワード相当フィールドはpasswordとします。

コントローラーでの処理

コントローラーでの処理はまず認証を行いたいコントローラで$componentを定義します。

全体に認証をかけたいようなときはAppControllerがいいでしょう。

$component

コードを見てもらえればわかりますが

ログイン後どのページにとぶかをloginRedirect,

ログアウト後どのページにとぶかをlogoutRedirect

ログイン自体をどのプログラムで行うかをloginActionで定義します。

またテーブル名がUsersの時はいらないのですが、任意の名前にしたいとき(上記の例でいうとadminsテーブル)は

‘authenticate’=>・・・で定義する必要があります。(上記のコードでは書いていないですが、ユーザー名とパスワードに相当するカラムも指定できます。)

Auth->allow

認証がかかると当然、認証されていないページには入れなくなりますが、ログイン画面自体に認証が働いている場合、ログイン自体ができません(ユーザーの作成すらできないですね)。

そのため、認証をしないページをAuth->allowで設定できます。

一般的にはbeforeFilterなどページにアクセスする前に記述されることが多いです。

例えばloginページとlogoutページのみはずす場合は下記のように記述します。

ログインのコード

実際にloginとlogoutのコードは下記のようになります。

バージョンが違うと微妙にこの辺の書き方が違うんですよね・・・

またログイン後のページで認証を取得したユーザーの情報を見たいときは

特定のフィールド $userId = $this->Auth->user ( ‘id’ );

レコード全体 $this->Auth->user ()

になります。

保存時のコード

肝心のログインユーザーなんですが、登録するときにパスワードを平文で登録しておくと認証がとおりません。下記のように保存前にハッシュ化してあげるのがいいでしょう。

ちなみに2系では上記のように引数に$optionがないとエラーになります。

ビュー側での処理

view側での処理も非常に楽です。下記のように書いてあげればOKです。

参考リンク

CakePHP2.xのユーザー認証(Auth)の実装とかなんとか – PHP

CakePHP $this->Auth->user(‘フィールド’)が取得できない時にチェックすべきこと PHP

【CakePHP】CakePHP2.x : ModelのbeforeSave()メソッドのStrict (2048)エラー対応

http://book.cakephp.org/2.0/ja/core-libraries/components/authentication.html

やっぱ有名なフレームワークだと情報がいろいろあるのが楽ですね。

-PHP
-,

執筆者:


comment

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

関連記事

no image

cakeでの多対多を含んだ検索に関して

cakeを使って多対多を実現する方法はこのエントリーで紹介しました。 が、多対多を含む検索をする場合は一筋縄ではいかず結構面倒くさいです。 通常cakeで検索を行う場合、 ‘conditi …

no image

cakePHP Tips その2

またまたCakePHPのネタです。 タイトルから内容がわからなくてすいません。 五月雨式に行きます。 Contents1 コントローラーごとのベースになるテンプレートの変更2 linkタグでのHTML …

no image

Facadeパターンについて(Laravelを題材に)

LaravelのFacadeについて自作する機会があったので、メモ。 デザインパターンの一種かと思います。 Contents1 サンプル2 使い所3 メリット4 デメリット5 参考リンク サンプル h …

no image

Laravelのサービスプロバイダ

ミドルウェアやルーティング同様、惰性で使っていたサービスプロバイダについてめも。 Contents1 サービスプロバイダとは2 参考リンク・参考文献 サービスプロバイダとは Laravelでは特定のサ …

no image

CakePHPでのプレフィックスルーティング

cakePHPではルーティングがデフォルトでは/コントローラ名/アクション名となります。 ところが管理画面などはadmin/コントローラー名/アクション名などと変則的なURLにしたいことも多いでしょう …

アーカイブ