エス技研

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


CakePHP3のユーザ管理・ログイン認証プラグインCakeDC/Usersのインストール解説・3.6以降対応

      2022/03/31

CakePHP3のユーザ認証管理プラグイン CakeDC/Usersとは

 

CakeDCとは?

 
CakeDCは、CakePHPを開発した Larry Masters氏が設立した Cake Development Corporationという団体で、CakePHPなどを利用してシステム開発などを請け負う団体です。
 
また、今回紹介するようなユーザ管理、認証管理などを行うプラグイン Usersなどの開発、提供も行っています。
 
 
CakePHPというフレームワークは無償で利用できますので、ユーザが増えても CakePHPを作った方々の収益にはならないため、収益を上げるための事業を行っているのが CakeDCということになるのでしょうか。
 
CakeDCについては下記に案内があります。英語ですが...
 https://www.cakedc.com/about
 
 

CakeDC/Usersプラグインとは?

 
今回は、そんな CakePHPを作った方々が提供している CakeDC謹製の Usersというプラグインの紹介です。
 
この Usersプラグインは、会員管理システムを提供するもので、会員の新規登録、ログイン認証、および、管理側で管理する会員管理の仕組みなどをプラグインとして提供するものです。
 
具体的な機能に関しては以下のようなものがあります。
 

  • ユーザ登録
  • メールで送信されたトークンによるアカウント確認
  • ユーザログイン(メールアドレス/パスワード)
  • ソーシャルログイン(Twitter、Facebook)
  • メールでトークンを要求し、新しいパスワードを入力することによってパスワードをリセット
  • ユーザ管理(登録/更新/削除)
  • シンプルな権限管理
  • シンプルな Rbacとスーパーユーザの承認
  • Cookie機能を使用した RememberMe(ログイン状態を保存する)
  • ユーザ登録時に reCAPTCHA使用

 
※「Rbac」とは?
Rbacとは、ロールベースアクセス制御(Role-based access control)のことで、ユーザはロール(権限)が割り当てられ、そのロールによってアクセス制御をする仕組みのことです。
 
詳細は下記を参照してください。
https://github.com/CakeDC/users/blob/3.1.5/Docs/Documentation/Overview.md
 
 
ちなみに、CakeDC/Usersプラグインをインストールして認証されたページの確認をする際は、あらかじめ何かしらの情報を管理するページがあると検証が分かりやすくなるでしょう。
CakeDC/Usersプラグインを導入するとユーザの管理画面は構築されますが、そのほかの管理画面を、例えば「CakePHP3でファイルのアップロード処理を自作・解説付き・その1」で紹介したような、Newsの CMSなどを Bakeで構築しておくと、ユーザ管理画面と Newsの管理画面など複数の画面で認証ができているかの確認ができますので、あらかじめ作成しておくことをおススメします。
 
 

CakePHP3のユーザ認証管理プラグイン CakeDC/Usersの導入解説

 

CakeDC/Usersのインストール、設定方法

 
CakeDC/Usersのインストール、設定方法に関する目次
 

 
 
インストールしたのち、設定情報を標準設定から変更する場合や、テンプレートファイルを更新する場合の対応方法は下記の別記事として書いていますので、あわせて参考にしてください。
 
CakePHP3のCakeDC/Usersの画面、メール本文テンプレートのカスタマイズ方法解説
CakePHP3のCakeDC/Usersのログイン後のリダイレクトとユーザ権限管理の設定解説
CakePHP3のCakeDC/UsersのUserHelperでログアウトやreCAPTCHAをカスタマイズ
Google reCAPTCHAのSite key、Secret keyの取得方法・20170408バージョン
CakePHP3のCakeDC/Usersのバリデーションのカスタマイズ方法解説
 
CakePHP4 に対応した記事は書きに書いていますのでこちらも参考にしてください。
CakePHP4のユーザ管理・ログイン認証プラグインCakeDC/Usersのインストール解説
 


 
 

1.コンポーザーを使って CakeDC/Usersプラグインをインストール

 
コンポーザーを使って CakeDC/Usersプラグインをインストールします。
 
下記コマンドを実行します。

 
 
バージョンに関するエラーが表示されてインストール出来ない場合は、下記のように最新バージョン以外のバージョンを指定してインストールを試してみてください。
前者は「8.5」を指定する方法で、後者は「8系の最新版」を指定する方法となります。
 

 
 
コンポーザーの使い方については「CakePHP3でcomposerを利用してライブラリ・プラグインをインストールする方法」を参照してください。
 
 

2.CakeDC/Usersをロードする処理を記述

 
インストールした Usersプラグインをロードする処理を記述します。
具体的には、/config/bootstrap.phpの 215行目辺りにプラグインをロードする処理を記述します。
 

 
Plugin::loadAll();」の設定をしている場合は、すべてのプラグインがロードされますので、個別の設定は必要ありません。
 
 
CakePHP 3.6.0 以降では、プラグインを読み込むための記述方法が変更になっています。
そのため、CakePHP 3.6.0 以降では下記のように記述します。
 

 
※下記の「Cookbook・プラグイン」のページでは、プラグインの読み込みを「/src/Application.php」に記述する方法が記載されていますが、「/config/bootstrap.php」に記述する場合は、上記のような書き方になります。
https://book.cakephp.org/3.0/ja/plugins.html#id4
 

CakePHP 3.6以降ではプラグインのロードの手続きが変わる

 

また、プラグインをロードする記述の方法として、上記のように記述する方法もあります。
 
この記述方法は、基本的には「Plugin::load('CakeDC/Users')」と同じです。
 
この記述方法では、CakePHP 3.6以降になると下記のエラー(Deprecated)が表示されるようになります。
「『Plugin::load()』は非推奨になりますので、『Application::addPlugin()』を使ってください」という内容です。
 
Deprecated (16384): Plugin::load() is deprecated. Use Application::addPlugin() instead. This method will be removed in 4.0.0. - C:\xampp\htdocs\config\bootstrap.php, line: 205
You can disable deprecation warnings by setting Error.errorLevel to E_ALL & ~E_USER_DEPRECATED in your config/app.php. [CORE\src\Core\functions.php, line 311]

 
 
 

3.migrationsコマンドで Usersテーブルを構築

 
Usersプラグインで利用するテーブルを構築します。
 
テーブルを構築するために migrationsコマンドを実行します。

 
この migrationsコマンドを実行することで、データベースに 3つのテーブルが作成されます。
ユーザーと資格情報が格納される「Users」と、ソーシャル・ログイン機能のトークンが格納され管理される「social_accounts」です。加えて、CakeDC/Usersがバージョンアップして作られるようになった「cake_d_c_users_phinxlog」です。
 
 
上記コマンドは、基本的には開発中のアプリのルートフォルダで実行しますが、もし、cakeコマンドにパスが通っていないときは、「bin」フォルダの中に入って「cake migrations migrate -p CakeDC/Users」を実行してみてください。
 
 

4.管理権限ユーザを作成

 
構築するユーザ管理システムの管理者権限のユーザを作成します。
 
下記コマンドを実行し、新しいユーザ(superadmin)を登録します。

 
このコマンドを実行すると、ユーザ管理画面を利用するために必要な、完全な管理権限が与えられているスーパーユーザが作成されます。
(管理権限の詳細な設定については、/vendor/cakedc/users/src/Auth/SuperuserAuthorize クラスを参照してください。)
 
コマンドを実行すると、下記の様に処理が実行され、画面が表示されます。
 

 
パスワードは、ここにしか表示されませんので、しっかり保存しておきましょう。
 
 

5.AppController.phpにコンポーネントをロードする処理を記述

 
AppController.phpに「CakeDC/Users.UsersAuth」のコンポーネントをロードする処理を記載します。
 
対象ファイルは「src/Controller/AppController.php」で、「initialize()」にコンポーネントのロード処理を記述します。
下記の 7行目のように追記します。
 

 
 

6.Usersプラグインの動作確認

 
前項までの手順で標準的な設定は完了です。
設定した内容が間違っていないか、ログインの確認を行います。
 
ログイン画面の URLは以下になります。
 http://example.com/login
 
上記でアクセスできない場合は、下記を入力してみてください。
 http://example.com/users/users/login
 
ログインに使う ID、PASSは、「4.管理権限ユーザを作成」で作成した「superadmin」とそのパスワードになります。
 
ログアウトする場合の URLは以下になります。
下記のログアウト URLを入力すると、ログアウト処理が実行され、ログイン画面にリダイレクトします。
 http://example.com/logout
 
 
ちなみに、先に説明した Newsの管理画面を作っておいた場合、それらの管理画面もログイン認証を行わないと画面が表示されなくなっていることが確認できます。
 http://example.com/news
 
 
 

CakeDC/Usersのユーザ登録、ログイン、管理側の一覧画面などの URL

 
インストールした CakeDC/Usersで構築された各画面の URLを記載します。
 
ログイン画面
 http://example.com/login
 
ログアウト URL
 http://example.com/logout
 
管理側のユーザ一覧画面
 http://example.com/users/users/
 
管理側のユーザ登録・更新・削除・詳細画面
 http://example.com/users/users/add
 http://example.com/users/users/edit/:id
 http://example.com/users/users/delete/:id
 http://example.com/users/users/view/:id
 ※add以外は、アクセス時にパラメータとして IDが必要です
 
ユーザ側の新規登録画面
 http://example.com/users/users/register
 
ユーザ側のユーザ登録時のメール認証のメール再送信画面
 http://example.com/users/users/resend-token-validation
 
ユーザ側のユーザプロフィール画面(ログイン時)
 http://example.com//users/users/profile
 
ユーザ側のパスワード変更画面(ログイン時)
 http://example.com/users/users/change-password
 
ユーザ側のパスワードリセット画面(メールアドレス入力画面)
 http://example.com/users/users/request-reset-password
 
 
 

CakeDC/Usersがインストールされる場所

 
コンポーザーを使って CakeDC/Usersプラグインをインストールすると、下記の場所にプラグイン関連ファイル一式が設置されます。
 /vendor/cakedc/users
 
下記の場所が CakeDC/Usersの設定ファイルが設置されています。
 /vendor/cakedc/users/config
 
下記の場所に、プラグインのコントローラーの実際の処理が記述してあるファイルが設置されています。
 /vendor/cakedc/users/src/Controller/Traits
 
下記の場所には CakeDC/Usersの入力画面、一覧画面などのテンプレートが設置されています。
 /vendor/cakedc/users/src/Template
 
ただし、「/vendor/cakedc/users」にあるファイル一式はコアファイルですので、これらのファイルは更新しません。
例えば、テンプレートファイルをカスタマイズする場合は、「/src/Template/Plugin/CakeDC/Users」に必要なファイルをコピーしてからカスタマイズを行います。
 
ユーザの新規登録画面の解説と、テンプレートのカスタマイズなどの解説は「CakePHP3のCakeDC/Usersの画面、メール本文テンプレートのカスタマイズ方法解説」に書いていますので、こちらを参照してください。
 
 
 

参考サイト

 
記事を書く際には、CakeDCのオフィシャルブログと GitHubにアップされているドキュメントを参考にさせていただいています。
https://www.cakedc.com/jorge_gonzalez/2016/02/21/cakedc_users_plugin_for_cakephp_3_-_update
https://github.com/CakeDC/users/blob/3.1.5/Docs/Home.md
 
 

CakePHP3の関連記事

CakePHP4のCSS、JavaScript、画像のブラウザへのキャッシュをコントロールする
CakePHP3でレコードを保存(追加、更新、Insert、Update)する複数の方法を紹介
CakePHP3でモデルなしフォームからCSVをアップロードしレコードを更新する方法解説
CakePHP3でPHP Simple HTML DOM Parserを使ってスクレイピングする方法
CakePHP3のInsert On Duplicate Key Update(upsert)構文を解説・バルク処理も
CakePHP3の1対多での連携を中間テーブルを使った多対多の連携に変更するときの手順
CakePHP3でデフォルトのソート条件を設定してユーザの選択肢たソート条件を有効にする方法
CakePHP3で Ajaxを使う方法の解説。3.6以降対応。Successとthenの両方を解説。
CakePHP3でパンくずの指定は HTMLヘルパーを使って指定する方法を解説
CakePHP3にOGPをfetch、asignを利用してテンプレートごとに指定する方法を解説
 
その他の「CakePHP3」に関する記事一覧
 
 
CakePHP4のFrozenDateで1ヵ月前、先月、今月1日、来月末の日付などを算出する方法
CakePHP4のcake cache clear_allでPermission deniedはパーミッションの変更が必要
CakePHP4のクリエビルダーを使用してOR条件をAND条件でつなぐSQL文を作る方法
CakePHP4のController内でViewテンプレート、レイアウトの変更設定を記述する方法
CakePHP4から外部のデータベースにアクセスする方法解説
CakePHP4の数値項目は「like %10%」の部分一致検索(find select)はできない
CakePHP4でロギングスコープやログレベルを使用してログを出し分ける方法を解説
CakePHP2、CakePHP3、CakePHP4、CakePHP5のバージョンを調べる 2つの方法
Windows上のXAMPP環境のCakePHPのコマンド実行時に環境変数を指定する方法
CakePHP4で複数の引数(パラメータ)を付与してコマンドを実行する方法
 
その他の「CakePHP4」に関する記事一覧
 
 

 - CakePHP 3.x 4.x ,

GoogleAdwords

GoogleAdwords

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

Message

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

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

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

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

  関連記事

cakephp3 カスタムバリデーションを簡易的に実装する方法
cakephp3 カスタムバリデーションを簡易的に実装する方法

CakePHP3の独自のバリデーションをテーブルクラス内に簡単に記述する方法を解説。他のテーブルクラスでは使えないが、記述する量は少なく実装できるため、他で使わない処理を書くのには便利。

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

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

CakePHP 2.3 Search Pluginで検索処理 その6ORDER、sortソートの機能

CakePHPの検索プラグイン Search Pluginの検索処理の中で order、ソートについての解説です。

CakePHPのバリデーションを入力値・項目の条件によって変える方法を解説
CakePHPのバリデーションを入力値・項目の条件によって変える方法を解説

入力された値によってバリデーション(入力チェック)の内容を切り替える。その処理をCakePHPで実装する方法を解説。条件ごとに unset関数を使ってバリデーションを削除する、という方法を採る。

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

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

CakePHP 2.3 連携先のテーブルの項目で条件抽出する場合

アソシエーション(連携)している先のテーブルの項目で条件抽出する際の考え方と注意点をサンプルソースを用いて説明しています。

CakePHP 2.3で saveの便利な使い方・サンプルソース付き

CakePHPのレコードを保存、更新する際に使う Saveを詳細解説します。

CakePHP3のfriendsofcake/searchでブックマークチュートリアルのタグ検索を実装
CakePHP3のfriendsofcake/searchでブックマークチュートリアルのタグ検索を実装

CakePHP3のCookbookにあるブックマークチュートリアル。ここで紹介されているタグで検索する処理を検索プラグイン「friendsofcake/search」で実現する方法を解説しました。

CakePHP 2.3で PDFを作成する方法を調査「mpdf」「TCPDF」「FPDF」

CakePHPで PDFを編集、出力するには「mpdf」「TCPDF」「FPDF」といったプラグインがあり、使い勝手を比較検討しました。TCPDFが一番良さそうでした。

CakePHP3で現在処理しているコントローラー名、アクション名を取得する方法
CakePHP3で現在処理しているコントローラー名、アクション名を取得する方法

CakePHP3で現在処理しているコントローラー名、アクション名を取得する方法を解説。複数の方法があるが、getParam()メソッドを使う方法が汎用性があって便利かも。