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 2 3 4 5 6 |
$result = $this->Authentication->getResult(); if ($result && $result->isValid()) { echo "ログインしている"; } else { echo "ログインしていない"; } |
上記の 1行目のように「$this->Authentication
」でログインユーザの値の取得を試行し、値が取得できたらログインできている、という判定を行うというものです。
https://book.cakephp.org/5/ja/tutorials-and-examples/cms/authentication.html#id3
この処理は、先に紹介した「CMS チュートリアル – 認証」の「ログイン追加」の項目にある「public function login()」で追加する、ログイン認証処理に記載がある方法です。
ログイン認証で使用する処理として Cookbookに紹介してあるくらいですので、非常に信頼できる方法かと思います。
ログインユーザの情報の取得方法
この方法で取得した「$result」には、ログイン認証の結果、および、ログインユーザの情報が入っています。
1 2 3 4 5 |
// ログイン認証を通過している場合は「SUCCESS」が取得できる $this->Authentication->getResult()->getStatus(); // $result を使用する場合は下記となる $result->getStatus(); |
上記の方法でログインの状態のステータスを取得することができます。
取得できるステータスの種類については下記を参照してください。
Cookbook Authentication3.x 認証 Component - ログイン状態を確認する
https://book.cakephp.org/authentication/3/ja/authentication-component.html#id2
この記事ではいろいろなログインユーザの情報を取得する処理を紹介していますが、このログインの状態を取得できる処理は多くないため、その点からこの「getResult()」を使用する処理が一番無難なような気がします。
また、上記の取得できるステータスを元に、下記のようにログイン判定をすることもできます。
1 2 3 4 5 |
if ($this->Authentication->getResult()->getStatus() == "SUCCESS") { echo "ログインしている"; } else { echo "ログインしていない"; } |
ログインしているユーザ情報を取得する場合は下記のように記述します。
1 2 3 4 5 6 7 8 |
// ->getData() でログインユーザ全体の情報が取得できる $loginUser = $this->Authentication->getResult()->getData(); // さらにカラム名を指定する事でそのカラムの値を取得できる // 下記は「Users.name」というカラムがある想定 $name = $this->Authentication->getResult()->getData()->name; $name = $this->Authentication->getResult()->getData()["name"]; $name = $loginUser->name; |
$this->request->getAttribute('identity')
を使用する方法
ログイン認証の有無の確認方法
次は、「$this->request->getAttribute('identity')
」を使用する方法です。
1 2 3 4 5 6 |
$result = $this->request->getAttribute('identity'); if($result){ echo "ログインしている"; } else { echo "ログインしていない"; } |
上記の 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」には、ログインユーザの情報が入っています。
1 2 3 4 5 6 7 8 |
// カラム名を指定する事でそのカラムの値を取得できる(下記 3つの方法がある) $name = $this->request->getAttribute('identity')->name; $name = $this->request->getAttribute('identity')->get("name"); $name = $this->request->getAttribute('identity')["name"]; // 一度変数に入れる場合は下記のような記述になる $result = $this->request->getAttribute('identity'); $name = $result->name; |
$this->request->getAttribute('authentication')
を使用する方法
ログイン認証の有無の確認方法
続いては、「$this->request->getAttribute('identity')
」を使用する方法です。
1 2 3 4 5 |
if ($this->request->getAttribute('authentication')->getResult()->getStatus() == "SUCCESS") { echo "ログインしている"; } else { echo "ログインしていない"; } |
上記の 1行目のように「$this->request->getAttribute('authentication')->getResult()->getStatus()
」で、ステータスが取得できますので、「SUCCESS」の場合は、ログインできている、と判別することができます。
ちなみに、一番最初の
「$this->Authentication->getResult()
」
と
「$this->request->getAttribute('authentication')->getResult()
」
は、まったく同じ情報を取得できます。
これは、「$this->Authentication
」が「$this->request->getAttribute('authentication')
」のエイリアスのような存在だからです。
厳密には、異なるようですが。
ログインユーザの情報の取得方法
上記のことから、ログインしているユーザ情報を取得する方法も「$this->Authentication
」と同じで、下記のように取得することができます。
1 2 3 4 5 6 7 |
// ->getData() でログインユーザ全体の情報が取得できる $loginUser = $this->request->getAttribute('authentication')->getResult()->getData(); // さらにカラム名を指定する事でそのカラムの値を取得できる // 下記は「Users.name」というカラムがある想定 $name = $this->request->getAttribute('authentication')->getResult()->getData()->name; $name = $this->request->getAttribute('authentication')->getResult()->getData()["name"]; |
$this->getRequest()->getSession()->read('Auth')
を使用する方法
ログイン認証の有無の確認方法
続いては、「$this->getRequest()->getSession()->read('Auth')
」を使用して、セッション情報からログイン情報を取得する方法です。
1 2 3 4 5 |
if ($this->getRequest()->getSession()->read('Auth')) { echo "ログインしている"; } else { echo "ログインしていない"; } |
上記の 1行目の「$this->getRequest()->getSession()->read('Auth')
」でログインユーザ情報の取得を試行し、値が取得できたらログインできている、という判定を行うというものです。
ログインできていない場合は nullが返ってきます。
ログインユーザの情報の取得方法
取得できる情報は、一番最初の「$this->Authentication->getResult()
」で取得できるユーザ情報と同じです。
ログイン認証できたユーザ情報をセッションに持たせているだけですので。
そのため、ユーザ情報を取得する方法は、セッション情報の取り扱い方と同じです。
1 2 3 4 5 6 |
// カラム名を指定する事でそのカラムの値を取得できる // 下記は「Users.name」というカラムがある想定 $name = $this->getRequest()->getSession()->read('Auth')->name; $name = $this->getRequest()->getSession()->read('Auth')->get("name"); $name = $this->getRequest()->getSession()->read('Auth.name'); $name = $this->getRequest()->getSession()->read('Auth')["name"]; |
View Helperを使用する方法
ログイン認証の有無の確認方法
最後は、View Helperを使用する方法です。
これは、View Helperの言葉の通り、Controllerではなく Viewでのみ使用可能です。
まず初めに、「/src/View/AppView」の「initialize」に下記の 6行目のコードを追加します。
1 2 3 4 5 6 7 8 |
public function initialize(): void { parent::initialize(); // ログインユーザ情報を取得するための Helper $this->loadHelper('Authentication.Identity'); } |
その上で、認証情報を利用をしたい Viewファイルに下記を記載します。
1 2 3 4 5 |
if ($this->Identity->isLoggedIn()) { echo "ログインしている"; } else { echo "ログインしていない"; } |
上記の 1行目の「$this->Identity->isLoggedIn()
」で、ログイン認証の可否を取得できますので、それで判別します。
具体的には、ログインできているときは「true」、できていないときは「false」が返ってきます。
ログインユーザの情報の取得方法
ログインしているユーザ情報は下記のように取得することができます。
1 2 3 |
// カラム名を指定する事でそのカラムの値を取得できる // 下記は「Users.name」というカラムがある想定 $name = $this->Identity->get("name"); |
機能として提供されてはいますが、使うことはほとんどないのではないか、という感じがします。
認証情報はコントローラーでも使うと思いますので、コントローラーで取得したものをビューに渡して使用する方が自然な流れなような気がしますので。
ログアウトは$this->Authentication->logout()
を実行する
最後に、ログアウトをするときの処理を書いておきます。
コントローラーの中に下記を書いておけば、そこでログアウトします。
1 |
$this->Authentication->logout(); |
CakePHP5の関連記事
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でヘルパーから他のヘルパーを読み込む方法・CakePHP4からの変更点
その他の「CakePHP5」に関する記事一覧
GoogleAdwords
GoogleAdwords
この記事が参考になったと思いましたらソーシャルメディアで共有していただけると嬉しいです!
関連記事
-
-
CakePHP3のForm Helperの使い方のまとめ
CakePHP3になりフォームヘルパーの使い方も大きく変わりましたので、使い方をまとめました。基本的な使い方からプラスアルファの便利な使い方まで紹介。
-
-
CakePHP3のInsert On Duplicate Key Update(upsert)構文を解説・バルク処理も
CakePHP3で Insert … On Duplicate Key Update構文(upsert)を実行する方法を解説。バルク処理の方法も用意されているため大量処理の場合も対応可能。
-
-
CakePHP 2.3 テーブルの項目を演算した結果を条件として抽出する方法
アソシエーション(連携)している先のテーブルの項目で演算をする場合の考え方と注意点をサンプルソースを用いて説明しています。分かってしまえば簡単です。
-
-
CakePHP4、5の認証処理で認証が通らない際の確認方法と確認箇所の紹介
CakePHP4、5系の認証処理でログイン認証が通らない場合の確認方法、確認箇所を解説。ログ出力し、ステータスを確認するが、ステータスの内容も紹介。それはそのままusernameを変更する際のポイントでもある。
-
-
CakePHP3のユーザ管理・ログイン認証プラグインCakeDC/Usersのインストール解説・3.6以降対応
CakePHP3のユーザ管理プラグイン Usersは、ユーザ登録、メール認証、ログイン認証、ユーザ管理、権限管理、reCAPTCHAなど会員制のサイトを簡単に実現可能。その導入方法、カスタマイズ方法を解説。
-
-
CakePHP 2.3で確認画面付きのお問い合わせフォームの作り方
CakePHPで確認画面付きのお問い合わせフォーム、メールフォームの作り方をサンプルを提示しながら解説。
-
-
CakePHP3にデザインテンプレートBootstrapを導入する方法・friendsofcake/bootstrap-ui使用
CakePHP3にプラグイン「friendsofcake/bootstrap-ui」、デザインテンプレート「Bootstrap」を設置する手順を解説。Bootstrapの簡単な使い方やデフォルトのデザインとの混在方法なども解説。
-
-
CakePHP4のFrozenDateで1ヵ月前、先月、今月1日、来月末の日付などを算出する方法
CakePHPには「FrozenDate」の日付を扱う関数が用意されている。これを利用して、1ヶ月後、月末日、月初日、5日後などを指定して日付を取得できる。それを解説。
-
-
CakePHP3でDocumentRootやtmp、webroot、logsなどのフォルダへのパスの定数
CakePHP3で特定フォルダのパスの定数を解説。root、DocumentRoot、app、config、webroot、tests、tmp、cache、vendor、コア、コアの srcが設定済み。realpath()関数を使うと柔軟なパス指定が可能。
-
-
CakePHPのFlashエラーは出るが入力項目ごとのメッセージが出ないエラーの原因
Bakeして自動生成した入力フォーム処理を元に少し処理を追加したら、入力エラーがあってもエラーメッセージが表示されなくなった。原因はリダイレクトの処理にあった。