エス技研

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


CakePHP3のユーザ管理・認証プラグイン CakeDC/Usersの導入・機能解説・3.6.0以降対応

      2019/04/06

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のバリデーションのカスタマイズ方法解説
 
 


 
 

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

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

 
コンポーザーの使い方については「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の関連記事

CakePHP3のCakeDC/Usersでログインユーザの所有レコードのみ更新、削除する権限管理の設定方法
CakePHP3で /Layout/defult.ctpにある titleタグ、h1タグを編集する方法
CakePHP3にデザインテンプレートBootstrapを導入する方法・friendsofcake/bootstrap-ui使用
CakePHP3で保存前にバリデーション結果を取得する2つの方法
CakePHP3で静的ページの作成は webrootか pagesを使う。トップページを参考に解説
CakePHP3のキャッシュをクリアする方法「bin/cake cache clear_all」を使う
CakePHP3のルーティング(routes.php)の変更が反映されない時はキャッシュのクリアを
Google Analytics APIを CakePHP3で動かしてレポートデータを取得する方法の解説
CakePHP3でComposerでインストールできないプラグイン、外部ライブラリを vendorに入れて手動で読み込む方法
CakePHP3でシェルを作成しコマンドラインから実行・CakePHP2との違い
 
その他の「CakePHP3」に関する記事一覧
 
 

 - CakePHP 2.x 3.x

GoogleAdwords

GoogleAdwords

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

Message

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

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

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

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

  関連記事

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

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

CakePHP3のCakeDC/Usersのログイン後のリダイレクトを設定解説
CakePHP3のCakeDC/Usersのログイン後のリダイレクトとユーザ権限管理の設定解説

CakeDC謹製Usersプラグインの紹介。ログイン認証後にリダイレクトする先の設定方法についての解説と実運用するために必要なコツを解説。便利な仕組みも仕様の理解があって初めてうまく使いこなせる。

CakePHP3でcomposerを利用してライブラリ・プラグインをインストールする方法

CakePHP3でcomposerを使ってパッケージ(ライブラリ、プラグイン)をインストールする方法の解説。PHPを使うのはCakePHP3が初めてというような方への使い方から解説。

CakePHP3にデイトピッカー jQuery UI DatePickerを実装する手順の解説
CakePHP3にデイトピッカー jQuery UI DatePickerを実装する手順の解説

CakePHP3にjQuery UIのDatePickerを実装する手順を説明。併せて、デイトピッカーを設置に関連するCakePHP3の解説と、テーマを変更したり、表記を変更するカスタマイズする方法なども紹介。

CakePHP3でPHPExcelを使ってエクセルファイルを生成、出力する方法

CakePHP3でPHPExcelを利用してエクセルを編集、出力するサンプルソース+解説。PHPExcelのインストール方法の解説からファイル保存とダウンロードの方法なども解説。

CakePHP 2.3 テーブルの項目を演算した結果を条件として抽出する方法

アソシエーション(連携)している先のテーブルの項目で演算をする場合の考え方と注意点をサンプルソースを用いて説明しています。分かってしまえば簡単です。

CakePHP3のcontroller内でテンプレート、レイアウトを変更する際の指定方法

CakePHP3でテンプレートファイルやレイアウトファイルをデフォルトのものから別のものに変更したい場合の指定方法を解説。

CakePHP3でComposerでインストールできないプラグイン、外部ライブラリを vendorに入れて手動で読み込む方法
CakePHP3でComposerでインストールできないプラグイン、外部ライブラリを vendorに入れて手動で読み込む方法

CakePHP3にComposerからインストールできないプラグインやライブラリなどを利用する方法、vendorにファイルを設置し、composer.jsonを更新し、それを呼び出す方法を詳細に解説。

CakePHP3でページごとに読み込むJavaScript、CSSを変える処理の解説
CakePHP3でページごとに読み込むJavaScript、CSSを変える処理の解説

CakePHP3でJavaScriptやCSSを編集する基本形から、それらやテンプレート(エレメント)を特定のテンプレートを読み込んだときのみ編集、実行するための方法、ブロック化について解説。

CakePHP3で値を入力直後にバリデーションする方法解説
CakePHP3で値を入力直後にバリデーションする方法解説

CakePHP3でバリデーションの実行を保存する時から入力情報を受け取るときに変更する処理の解説。CakePHP3ではnewEntity()の処理でバリデートするため1行追加で対応可能。