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

PHPで配列の同一性(集合のチェック)

AとBという配列があり、A⊂B つまりは集合のような関係を確かめたいときに下記のようなメソッドを使います。  

no image

PHPの開発事情 (PHPBrew/ビルトインサーバー/Xdebug/PHPUnit/Composer)

私自身、プログラミングは好きなんですがあまり現代の流行の技術に興味がありません(汗) IT業界はドッグイヤーならぬ、マウスイヤーとも呼ばれているようで、常に最新技術の動向には目を光らせていく必要があり …

no image

クラスメソッドとインスタンスメソッド

以前staticメソッドを定義したときに、記法がインスタンスメソッドの呼び方でも呼べてしまうことがあったので、これを機にインスタンス・クラス×変数・メソッドちょっと調べてみました。 言葉で書くよりコー …

no image

PHPでのPDF出力 基本&日本語出力

今回はPHPでのPDFファイルの出力です。 Contents1 ライブラリ2 ソース3 参考リンク ライブラリ 使うライブラリはFPDFというライブラリです。 http://www.fpdf.org/ …

no image

PHPコマンドに関して

今更ですが、使えると思ったPHPコマンドなど。 Contents1 php -r2 php -l3 php -a4 php -i, php -m php -r PHPをそのまま実行させる。 perlで …