エス技研

WordPress、CakePHP、PHP、baserCMSなどの Web系システムを中心に情報を提供します!


CakePHP4、CakePHP5系の認証処理でログインの有無の確認、ユーザ情報の取得の方法

      2025/03/23

CakePHP4系、5系ではプラグイン「Authentication」を使用して認証処理を行う

 
CakePHP4系、CakePHP5系では Authenticationというプラグインを使用して、認証処理を行います。
Authentication Ver.2 は CakePHP4系で、Ver.3 は CakePHP5系で使用します。
 
CakePHP Authentication Ver.2
https://book.cakephp.org/authentication/2/ja/index.html
 
CakePHP Authentication Ver.3
https://book.cakephp.org/authentication/3/ja/index.html
 
 
実装方法は、下記の CakePHPオフィシャルサイトに詳しく紹介されていますので、おおよそ問題はないんじゃないかと思います。
 
Cookbook CMS チュートリアル – 認証
https://book.cakephp.org/4/ja/tutorials-and-examples/cms/authentication.html
https://book.cakephp.org/5/ja/tutorials-and-examples/cms/authentication.html
 
Cookbook シンプルな認証と認可のアプリケーション
https://book.cakephp.org/4/ja/tutorials-and-examples/blog-auth-example/auth.html
https://book.cakephp.org/5/ja/tutorials-and-examples/blog-auth-example/auth.html
 
ただ、1点だけ、CakePHP5系では、公式サイトの記述が間違っている点がありますので、下記の記事を確認していただいて、対応をしてください。
CakePHP5系で認証機能のAuthenticationプラグインをインストール・エラー発生注意
 
 

CakePHPの Authenticationでログインの有無と、ユーザ情報の取得方法

 
さて、前段が長くなりましたが、ログイン認証を実装したら、おおよそその次に行うであろう下記の方法について解説します。
 
・ログインしているかしていないかの判別
・ログインしているユーザの情報の取得
 
 
ちなみに、いずれも複数の方法があります。
好きな方法を使用すればいいかと思います。
 
 

$this->Authentication->getResult()を使用する方法

 

ログイン認証の有無の確認方法

 
まず最初は、「$this->Authentication->getResult()」を使用する方法です。
 

 
上記の 1行目のように「$this->Authentication」でログインユーザの値の取得を試行し、値が取得できたらログインできている、という判定を行うというものです。
 
https://book.cakephp.org/5/ja/tutorials-and-examples/cms/authentication.html#id3
この処理は、先に紹介した「CMS チュートリアル – 認証」の「ログイン追加」の項目にある「public function login()」で追加する、ログイン認証処理に記載がある方法です。
 
 
ログイン認証で使用する処理として Cookbookに紹介してあるくらいですので、非常に信頼できる方法かと思います。
 
 

ログインユーザの情報の取得方法

 
この方法で取得した「$result」には、ログイン認証の結果、および、ログインユーザの情報が入っています。
 

 
上記の方法でログインの状態のステータスを取得することができます。
取得できるステータスの種類については下記を参照してください。
 
Cookbook Authentication3.x 認証 Component - ログイン状態を確認する
https://book.cakephp.org/authentication/3/ja/authentication-component.html#id2
 
 
この記事ではいろいろなログインユーザの情報を取得する処理を紹介していますが、このログインの状態を取得できる処理は多くないため、その点からこの「getResult()」を使用する処理が一番無難なような気がします。
 
 
また、上記の取得できるステータスを元に、下記のようにログイン判定をすることもできます。
 

 
 
ログインしているユーザ情報を取得する場合は下記のように記述します。
 

 
 

$this->request->getAttribute('identity')を使用する方法

 

ログイン認証の有無の確認方法

 
次は、「$this->request->getAttribute('identity')」を使用する方法です。
 

 
上記の 1行目のように「getAttribute('identity')」でログインユーザの値の取得を試行し、値が取得できたらログインできている、という判定を行うというものです。
 
先の「$this->Authentication」を使用する方法は、ログインしていない状態でも認証の可否などの情報を持っていますので、「$result」は「空」ではないですが、この「getAttribute('identity')」の処理は、認証できなかった場合は nullが戻ってくるため、上記のような判定になります。
 
https://book.cakephp.org/authentication/3/ja/identity-object.html
この処理は、上記の「Identity Objects」の解説に書いてある方法です。
 
 
私はこの方法を最初に知りましたので「getAttribute(‘identity’)」をメインに使っていましたが、取得できる情報は、先の「$this->Authentication」で取得できる情報とほぼ変わらない上に、ステータスは取得できないため、今後は「$this->Authentication」をメインに置き換えようと考えています。
 
 

ログインユーザの情報の取得方法

 
この方法で取得した「$result」には、ログインユーザの情報が入っています。
 

 
 

$this->request->getAttribute('authentication')を使用する方法

 

ログイン認証の有無の確認方法

 
続いては、「$this->request->getAttribute('identity')」を使用する方法です。
 

 
上記の 1行目のように「$this->request->getAttribute('authentication')->getResult()->getStatus()」で、ステータスが取得できますので、「SUCCESS」の場合は、ログインできている、と判別することができます。
 
 
ちなみに、一番最初の
$this->Authentication->getResult()

$this->request->getAttribute('authentication')->getResult()
は、まったく同じ情報を取得できます。
 
これは、「$this->Authentication」が「$this->request->getAttribute('authentication')」のエイリアスのような存在だからです。
厳密には、異なるようですが。
 
 

ログインユーザの情報の取得方法

 
上記のことから、ログインしているユーザ情報を取得する方法も「$this->Authentication」と同じで、下記のように取得することができます。
 

 
 

$this->getRequest()->getSession()->read('Auth')を使用する方法

 

ログイン認証の有無の確認方法

 
続いては、「$this->getRequest()->getSession()->read('Auth')」を使用して、セッション情報からログイン情報を取得する方法です。
 

 
上記の 1行目の「$this->getRequest()->getSession()->read('Auth')」でログインユーザ情報の取得を試行し、値が取得できたらログインできている、という判定を行うというものです。
ログインできていない場合は nullが返ってきます。
 
 

ログインユーザの情報の取得方法

 
取得できる情報は、一番最初の「$this->Authentication->getResult()」で取得できるユーザ情報と同じです。
ログイン認証できたユーザ情報をセッションに持たせているだけですので。
 
そのため、ユーザ情報を取得する方法は、セッション情報の取り扱い方と同じです。
 

 
 

View Helperを使用する方法

 

ログイン認証の有無の確認方法

 
最後は、View Helperを使用する方法です。
これは、View Helperの言葉の通り、Controllerではなく Viewでのみ使用可能です。
 
 
まず初めに、「/src/View/AppView」の「initialize」に下記の 6行目のコードを追加します。
 

 
 
その上で、認証情報を利用をしたい Viewファイルに下記を記載します。
 

 
上記の 1行目の「$this->Identity->isLoggedIn()」で、ログイン認証の可否を取得できますので、それで判別します。
具体的には、ログインできているときは「true」、できていないときは「false」が返ってきます。
 
 

ログインユーザの情報の取得方法

 
ログインしているユーザ情報は下記のように取得することができます。
 

 
 
機能として提供されてはいますが、使うことはほとんどないのではないか、という感じがします。
認証情報はコントローラーでも使うと思いますので、コントローラーで取得したものをビューに渡して使用する方が自然な流れなような気がしますので。
 
 

ログアウトは$this->Authentication->logout()を実行する

 
最後に、ログアウトをするときの処理を書いておきます。
 
コントローラーの中に下記を書いておけば、そこでログアウトします。
 

 
 

CakePHP5の関連記事

CakePHPのpostlinkで生成した削除リンクをクリックしても処理が実行されない対処法
CakePHP4、5のユーザ認証でID、PASS以外の削除フラグなども条件加える方法
CakePHP4、CakePHP5系の認証処理でログインの有無の確認、ユーザ情報の取得の方法
CakePHP4、5で$_SERVERと同じようにURIを取得する「getUri()」の紹介
getParam('action')で取得するアクション名は別関数に移動しても不変
CakePHP4系、CakePHP5系のexists()でカラムを指定して値の有無をチェックする方法解説
CakePHP4、5のnewEmptyEntityで作成したオブジェクトは空なのか、確認してみた
CakePHP4、5でSELECT telephone as tel FROM usersの様にasでカラムに別名を付ける方法
CakePHP4、5の認証処理で認証が通らない際の確認方法と確認箇所の紹介
CakePHP5系で認証機能のAuthenticationプラグインをインストール・エラー発生注意
 
その他の「CakePHP5」に関する記事一覧
 
 

 - CakePHP 3.x 4.x 5.x

GoogleAdwords

GoogleAdwords

最後までお読みいただきましてありがとうございます。
この記事が参考になったと思いましたらソーシャルメディアで共有していただけると嬉しいです!

Message

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

下記の空欄を埋めてください。 * Time limit is exhausted. Please reload CAPTCHA.

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

※入力いただいたコメントは管理者の承認後に掲載されます。

  関連記事

CakePHP4のCakeDC/Usersの画面、メール本文テンプレートのカスタマイズ方法解説
CakePHP4のCakeDC/Usersの画面、メール本文テンプレートのカスタマイズ方法解説

CakeDC謹製Usersプラグインの紹介。ユーザ新規登録の流れを紹介しつつ、テンプレートファイル、設定情報ファイルの場所とそれらをカスタマイズする方法を説明します。

CakePHP3でモデルなしフォームからCSVをアップロードしレコードを更新する方法解説
CakePHP3でモデルなしフォームからCSVをアップロードしレコードを更新する方法解説

CakePHP3でCSVファイルをアップロードしレコードを追加、更新する処理の作成方法の解説。モデルとは直接関連しないフォームからCSVファイルをアップロードするため汎用的に使用可能。

CakePHP3のCakeDC/Usersの画面、メール本文テンプレートのカスタマイズ方法解説
CakePHP3のCakeDC/Usersの画面、メール本文テンプレートのカスタマイズ方法解説

CakeDC謹製Usersプラグインの紹介。ユーザ新規登録の流れを紹介しつつテンプレートファイルがどこにあるか、設定情報ファイルがどこにあるか、を説明しつつカスタマイズの方法を解説します。

CakePHP3のアソシエーション機能を使い関連レコードをまとめて削除

CakePHP3でレコードを削除する際に関連するレコードをまとめて削除する機能の解説。フレームワークのメリットを存分に発揮し、コマンドを1行追加するだけで実装可能。

CakePHP3で生の SQLの実行はConnectionManagerを使う
CakePHP3で生の SQLの実行はConnectionManagerを使う

CakePHP3で生の SQL文を実行する方法を解説。クリエビルダーを使う場合は TableRegistryを利用するが、SQLを実行する場合は ConnectionManagerを使う。プリペアードステートメントの使用方法も解説。

CakePHP 2.x系 Viewでのコメントの記述方法など

CakePHPにおいて View、ctpファイルでコメントを記述する方法を解説。

CakePHP3のキャッシュをクリアする方法「bin/cake cache clear_all」を使う
CakePHP3、CakePHP4のキャッシュをクリアする方法「bin/cake cache clear_all」を使う

CakePHP3、CakePHP4では処理を高速化する手法の一つとしてキャッシュを利用している。しかし、その情報は元の情報を更新しても反映されない場合がある。そんなときはキャッシュを削除する必要がある。

CakePHP3で他のテーブルのマスタテーブルからセレクトボックス(プルダウンリスト)を作る
CakePHP3で他のテーブルのマスタテーブルからセレクトボックス(プルダウンリスト)を作る

他のテーブルのマスタのレコードからプルダウンリストを作成し、選択できるようにするサンプルプログラムと解説。ORMの設定によりデータベースの値を取得し、配列を作成し optionsに与える。

CakePHP3のデバッグキット(DebugKit)を強制的に有効、無効に変更する方法
CakePHP3のデバッグキット(DebugKit)を強制的に有効、無効に変更する方法

CakePHP3に付属しているデバッグのためのツール、デバッグキットを強制的に有効化、無効化する方法を解説。初期設定では開発環境としてありそうなドメインの場合のみ有効になるように設定されている。

getParam('action')で取得するアクション名は別関数に移動しても不変
getParam('action')で取得するアクション名は別関数に移動しても不変

CakePHP4系、5系では「getParam()」で処理中のアクション名を取得できる。そのアクションから別関数を呼び出してた関数でアクション名を調べたが同一の名称だった。