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におけるDI

Contents1 DIについての概要2 自分が作った簡単なサンプル(リンクの写経)3 参考リンク DIについての概要 PHPでのDI(Dependency Injection)に関して。 オブジェク …

no image

underbarphpについて+配列処理頻出パターン

配列系の処理を関数型で行いたいときにJavaだとラムダ式、javaScriptだとunderscore.jsがあります。 PHPではできないものか・・といろいろと探していたところunderbar.ph …

no image

Cakeの共通処理

CakePHPだけに限りませんが、フレームワークの場合、オブジェクト指向の特徴を理解して、全ページに共通な処理などは個々のコントローラーに書くのではなく、もっと抽象度の高いクラスに書いたほうが保守性が …

no image

phpのライブラリ(mcrypt)インストール

先日、ローカルで開発していたPHPをサーバーにアップして、composerでライブラリをアップデートしようとしたところ、 "The mcrypt extension is missing. Please check your PHP configuration." なるエラー …

no image

streamについて

CSVダウンロード機能などを実装していて、動くコードはかけていますが、内容をよく理解していないことも多かったです。 今回はストリームについて。 ストリームとは 主にデータの総量がわからないケースでよく …

アーカイブ