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

Traitによるコードの再利用

PHPでは多重継承が禁じられて(親は1つしかもてない)いるため、共通性のあるコードを書こうと思った時に親にかいていない場合限界があります。 そんな時に使えるのがTraitという考え方で、これを使います …

no image

携帯サイト取得手法

PHPでスクレイピングの仕事をよくやるんですが、携帯サイトを取得してほしいという要望があり、少し調査をすることに。 携帯サイトといってもドメイン以下のディレクトリで/で区切ってsample.domai …

no image

メモリー不足でのスワップ割り当て

先日、あるサーバーでcomposerをinstallしようとしたところ、 The following exception is caused by a lack of memory or swap, …

no image

cakePHP小ネタ集(Authの複数認証)

最近よく触っているcakePHPの小ネタなど。 Contents1 Authコンポーネント 複数の認証2 自動のdivタグを出力しない3 Cakeでのプルダウン作成 Authコンポーネント 複数の認証 …

no image

composer最低保証のバージョンを管理

自分の開発端末ではPHPのバージョンが7.1何ですが、上げなければいけないサーバーのバージョンが7.0だったりして、

みたいなエラーが …

アーカイブ