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のインストール、設定方法に関する目次
- 1.コンポーザーを使って CakeDC/Usersプラグインをインストール
- 2.CakeDC/Usersをロードする処理を記述
- 3.migrationsコマンドで Usersテーブルを構築
- 4.管理権限ユーザを作成
- 5.AppController.phpにコンポーネントをロードする処理を記述
- 6.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プラグインをインストールします。
下記コマンドを実行します。
1 |
composer require cakedc/users |
バージョンに関するエラーが表示されてインストール出来ない場合は、下記のように最新バージョン以外のバージョンを指定してインストールを試してみてください。
前者は「8.5」を指定する方法で、後者は「8系の最新版」を指定する方法となります。
1 2 |
composer require cakedc/users:8.5 composer require cakedc/users:8.* |
コンポーザーの使い方については「CakePHP3でcomposerを利用してライブラリ・プラグインをインストールする方法」を参照してください。
2.CakeDC/Usersをロードする処理を記述
インストールした Usersプラグインをロードする処理を記述します。
具体的には、/config/bootstrap.phpの 215行目辺りにプラグインをロードする処理を記述します。
1 |
Plugin::load('CakeDC/Users', ['routes' => true, 'bootstrap' => true]); |
「
CakePHP 3.6.0 以降では、プラグインを読み込むための記述方法が変更になっています。
そのため、CakePHP 3.6.0 以降では下記のように記述します。
1 |
\App\Application::addPlugin('CakeDC/Users',['routes' => true, 'bootstrap' => true]); |
※下記の「Cookbook・プラグイン」のページでは、プラグインの読み込みを「/src/Application.php」に記述する方法が記載されていますが、「/config/bootstrap.php」に記述する場合は、上記のような書き方になります。
https://book.cakephp.org/3.0/ja/plugins.html#id4
CakePHP 3.6以降ではプラグインのロードの手続きが変わる
1 |
\Cake\Core\Plugin::load('CakeDC/Users'); |
また、プラグインをロードする記述の方法として、上記のように記述する方法もあります。
この記述方法は、基本的には「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コマンドを実行します。
1 |
bin/cake migrations migrate -p CakeDC/Users |
この migrationsコマンドを実行することで、データベースに 3つのテーブルが作成されます。
ユーザーと資格情報が格納される「Users」と、ソーシャル・ログイン機能のトークンが格納され管理される「social_accounts」です。加えて、CakeDC/Usersがバージョンアップして作られるようになった「cake_d_c_users_phinxlog」です。
上記コマンドは、基本的には開発中のアプリのルートフォルダで実行しますが、もし、cakeコマンドにパスが通っていないときは、「bin」フォルダの中に入って「cake migrations migrate -p CakeDC/Users
」を実行してみてください。
4.管理権限ユーザを作成
構築するユーザ管理システムの管理者権限のユーザを作成します。
下記コマンドを実行し、新しいユーザ(superadmin)を登録します。
1 |
bin/cake users addSuperuser |
このコマンドを実行すると、ユーザ管理画面を利用するために必要な、完全な管理権限が与えられているスーパーユーザが作成されます。
(管理権限の詳細な設定については、/vendor/cakedc/users/src/Auth/SuperuserAuthorize クラスを参照してください。)
コマンドを実行すると、下記の様に処理が実行され、画面が表示されます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
C:\xampp\htdocs\cake\bin>cake users addSuperuser Welcome to CakePHP v3.3.11 Console --------------------------------------------------------------- App : src Path: C:\xampp\htdocs\cake\src\ PHP : 5.6.24 --------------------------------------------------------------- Superuser added: Id: aa54db31-837d-410f-b768-9fa4378eca12 Username: superadmin Email: superadmin@example.com Password: 60f14679af96edc8a23450a188f9a8b8 C:\xampp\htdocs\cake\bin> |
パスワードは、ここにしか表示されませんので、しっかり保存しておきましょう。
5.AppController.phpにコンポーネントをロードする処理を記述
AppController.phpに「CakeDC/Users.UsersAuth」のコンポーネントをロードする処理を記載します。
対象ファイルは「src/Controller/AppController.php」で、「initialize()」にコンポーネントのロード処理を記述します。
下記の 7行目のように追記します。
1 2 3 4 5 6 7 8 |
public function initialize() { parent::initialize(); : 中略 : $this->loadComponent('CakeDC/Users.UsersAuth'); } |
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」に関する記事一覧
GoogleAdwords
GoogleAdwords
この記事が参考になったと思いましたらソーシャルメディアで共有していただけると嬉しいです!
関連記事
-
cakephp3 カスタムバリデーションを簡易的に実装する方法
CakePHP3の独自のバリデーションをテーブルクラス内に簡単に記述する方法を解説。他のテーブルクラスでは使えないが、記述する量は少なく実装できるため、他で使わない処理を書くのには便利。
-
CakePHP3、CakePHP4のキャッシュをクリアする方法「bin/cake cache clear_all」を使う
CakePHP3、CakePHP4では処理を高速化する手法の一つとしてキャッシュを利用している。しかし、その情報は元の情報を更新しても反映されない場合がある。そんなときはキャッシュを削除する必要がある。
-
CakePHP 2.3 Search Pluginで検索処理 その6ORDER、sortソートの機能
CakePHPの検索プラグイン Search Pluginの検索処理の中で order、ソートについての解説です。
-
CakePHPのバリデーションを入力値・項目の条件によって変える方法を解説
入力された値によってバリデーション(入力チェック)の内容を切り替える。その処理をCakePHPで実装する方法を解説。条件ごとに unset関数を使ってバリデーションを削除する、という方法を採る。
-
CakePHP4のCakeDC/Usersの画面、メール本文テンプレートのカスタマイズ方法解説
CakeDC謹製Usersプラグインの紹介。ユーザ新規登録の流れを紹介しつつ、テンプレートファイル、設定情報ファイルの場所とそれらをカスタマイズする方法を説明します。
-
CakePHP 2.3 連携先のテーブルの項目で条件抽出する場合
アソシエーション(連携)している先のテーブルの項目で条件抽出する際の考え方と注意点をサンプルソースを用いて説明しています。
-
CakePHP 2.3で saveの便利な使い方・サンプルソース付き
CakePHPのレコードを保存、更新する際に使う Saveを詳細解説します。
-
CakePHP3のfriendsofcake/searchでブックマークチュートリアルのタグ検索を実装
CakePHP3のCookbookにあるブックマークチュートリアル。ここで紹介されているタグで検索する処理を検索プラグイン「friendsofcake/search」で実現する方法を解説しました。
-
CakePHP 2.3で PDFを作成する方法を調査「mpdf」「TCPDF」「FPDF」
CakePHPで PDFを編集、出力するには「mpdf」「TCPDF」「FPDF」といったプラグインがあり、使い勝手を比較検討しました。TCPDFが一番良さそうでした。
-
CakePHP3で現在処理しているコントローラー名、アクション名を取得する方法
CakePHP3で現在処理しているコントローラー名、アクション名を取得する方法を解説。複数の方法があるが、getParam()メソッドを使う方法が汎用性があって便利かも。