CakePHP4のCakeDC/Usersのログイン時のリダイレクトとユーザ権限管理の設定解説
2022/07/16
CakeDC/Usersのリダイレクト、ユーザ権限管理等の設定解説
「CakePHP4のユーザ管理・ログイン認証プラグインCakeDC/Usersのインストール解説」の記事で、CakePHP4で CakeDC/Usersを使ってログイン認証機能を実装し、実際にログインを実施してみました。
では、ログイン時に遷移する画面は、どのファイルで設定しているのでしょうか?
今回の記事では、ログイン時、ログアウト時に遷移する画面(リダイレクトする画面)、および、アクセスする際にログイン認証が必要な画面、必要ない画面などを設定する方法を解説します。
CakeDC/Usersのログイン、ログアウト時のリダイレクト設定
0.「CakeDC/Users」のログイン、ログアウト時の設定ファイル
プラグイン「CakeDC/Users」の設定ファイルは下記にあります。
/vendor/cakedc/users/config/users.php
このファイルを直接変更しても設定を変更することはできますが、プラグインのコアファイルとなりますので、一般的にはこのファイルを直接変更することはしません。
(「vendor」フォルダの中身はプラグインのコアファイルとなります。)
多くの場合は、このファイル設定を別の場所に複製して、そちらを変更します。
この記事ではその方法を解説しています。
1.users.phpを作成、編集
前項で説明したとおり、まずは設定ファイルを複製します。
/vendor/cakedc/users/config/users.php
を
/config/users.php
にコピーします。
本来は「users.php」ファイルを全部丸ごと複製した方がいいと思いますが、今回は実験のために、「users.php」ファイルを新規作成し、下記の内容を記述します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
<?php $config = [ 'Auth' => [ 'AuthenticationComponent' => [ 'load' => true, 'loginRedirect' => [ // ログイン後 'plugin' => 'CakeDC/Users', 'controller' => 'Users', 'action' => 'index', ], 'logoutRedirect' => [ // ログアウト後 'plugin' => 'CakeDC/Users', 'controller' => 'Users', 'action' => 'register', ], 'requireIdentity' => false, ], ], ]; return $config; |
上記の内容は「/vendor/cakedc/users/config/users.php」の 150行目付近にあるものを少し改変しています。
上記の設定は、ログインしたときのリダイレクト先を下記の URL(ユーザ一覧画面)としています。
http://example.com/users/index
ログアウトしたときのリダイレクト先を下記の URL(ユーザ登録画面)としています。
http://example.com/register
2.bootstrap.phpに「users.php」を読み込む設定
続いて、前項で設置した「users.php」を読み込む設定を記述します。
編集するファイルは下記になります。
/src/Application.php
下記の 5行目の記述を追加します。
1 2 3 4 5 |
// CakeDC/Usersのプラグインのロード $this->addPlugin(\CakeDC\Users\Plugin::class); // CakeDC/Usersの設定ファイル読み込み Configure::write('Users.config', ['users']); |
追記する場所は「CakePHP4のユーザ管理・ログイン認証プラグインCakeDC/Usersのインストール解説」で、CakeDC/Usersをインストールしたときに追記した、2行目のプラグインをロードする「$this->addPlugin(....
」に続けて記述をします。
これで、ログインしたとき、および、ログアウトしたときのリダイレクト先の設定は完了です。
「/vendor/cakedc/users/config/users.php」に記載してあるその他の変更したい項目がある場合は、「/config/users.php」にコピペして値を変更するとその値が適用されます。
「/config/users.php」に記載していない項目は、「/vendor/cakedc/users/config/users.php」に記載してある設定が適用されます。
「/vendor/cakedc/users/config/users.php」にも記載が無い項目は、プログラム上のデフォルト値が適用されます。
CakeDC/Usersのログイン権限の設定
前項では、ログイン時、ログアウト時のリダイレクト先の設定の解説をしましたが、続けて、ログインが必要なページ、ログインが不要なページを設定します。
具体的には、下記のような設定を行います。
・ログインしていなくてもアクセスできるページ
・ログインしているユーザがアクセスできるページ
・admin(管理者権限)でログインしているときにアクセスできるページ
この設定を間違えると、だれもログイン、ログアウトができなくなったり、だれでもユーザ一覧を見ることができるようになったりしますので、慎重な設定が求められます。
また、この設定の検証を行うために、最初に作成した「admin」以外の一般ユーザのアカウントを作成しておいてください。
0.「CakeDC/Users」のログイン要・不要の設定ファイル
プラグイン「CakeDC/Users」のログイン要・不要の設定ファイルは下記になります。
/vendor/cakedc/users/config/permissions.php
先の「users.php」と同様、この「permissions.php」に記載してある内容を変更する場合は、別の場所に複製してそちらを変更します。
1.permissions.phpを作成、編集
前項と同様に、まずは設定ファイルを複製します。
/vendor/cakedc/users/config/permissions.php
を
/config/permissions.php
にコピーします。
本来は「permissions.php」ファイルを全部丸ごと複製した方がいいと思いますが、今回は実験のために、「permissions.php」ファイルを新規作成し、下記の内容を記述します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 |
<?php return [ 'CakeDC/Auth.permissions' => [ //all bypass [ 'prefix' => false, 'plugin' => 'CakeDC/Users', 'controller' => 'Users', 'action' => [ // LoginTrait 'socialLogin', 'login', 'logout', 'socialEmail', 'verify', // RegisterTrait 'register', 'validateEmail', // PasswordManagementTrait used in RegisterTrait 'changePassword', 'resetPassword', 'requestResetPassword', // UserValidationTrait used in PasswordManagementTrait 'resendTokenValidation', 'linkSocial', //U2F actions 'u2f', 'u2fRegister', 'u2fRegisterFinish', 'u2fAuthenticate', 'u2fAuthenticateFinish', 'webauthn2fa', 'webauthn2faRegister', 'webauthn2faRegisterOptions', 'webauthn2faAuthenticate', 'webauthn2faAuthenticateOptions', ], 'bypassAuth' => true, ], //admin role allowed to all the things [ 'role' => 'admin', 'prefix' => '*', 'extension' => '*', 'plugin' => '*', 'controller' => '*', 'action' => '*', ], //specific actions allowed for the all roles in Users plugin [ 'role' => '*', 'plugin' => 'CakeDC/Users', 'controller' => 'Users', 'action' => [ 'profile', 'logout', 'linkSocial', 'callbackLinkSocial', 'index', 'add', ], ], ] ]; |
上記の内容は「/vendor/cakedc/users/config/permissions.php」の 52行目付近、100行目付近、109行目にあるものです。
それを元に、上記の 62、63行目に「index」「add」を追加しています。
先に紹介した「users.php」の設定は、設定を読み込む「Configure::write(....
」の設定が必要でしたが、「permissions.php」は設置するだけで記述した内容が反映されます。
permissions.phpの設定方法
前項の「permissions.php」の 5行目からの「all bypass」と書かれている箇所が、ログイン認証なしにアクセスが可能なページになります。
39行目の「'bypassAuth' => true
」を指定することで、その設定になります。
「CakeDC/Users」の Ver. 9より古いバージョンでは、各コントローラーに設定を記述していましたが、Ver. 9以降では「permissions.php」でまとめて管理する方法に変更されました。
詳細は下記を参照してください。
https://www.cakedc.com/rochamarcelo/2020/02/03/cakedc-users-9-x-easy-migration-from-authcomponent
また、41行目からの「admin role allowed to all the things」と書かれている箇所が、「スーパーユーザ権限(admin権限)」の認証した場合にアクセスできるページの設定です。
権限は 43行目の「role」で指定し、「スーパーユーザ権限(admin権限)」の場合は「'role' => 'admin'
」と指定します。
また、「admin権限」の場合は全ての項目が「*」となっていますが、これは「すべてのページに対してアクセスを許可する」という設定になっていることを表しています。
また、51行目からの「specific actions allowed for the all roles in Users plugin」と書かれている箇所が、「一般ユーザ権限(user権限)」の認証した場合にアクセスできるページの設定です。
53行目の「role」は「*」となっていますが、これは認証された全ての権限でアクセス可能、と言う意味です。
デフォルトの設定では「admin権限」と「user権限」しかありませんので、「*」は「user権限」と言う意味になります。
62行目に追加した設定によって、先の「users.php」に、ログインしたときのリダイレクト先として設定した下記の URLに一般ユーザがアクセスできるという設定をしています。
http://example.com/users/index
「redirect」パラメータでログイン時のリダイレクトページを指定する方法
ログイン時のリダイレクトページは「users.php」に記述すると説明しましたが、「redirect」パラメータを使用することで、ログイン時にリダイレクトする URLを指定することもできます。
CakeDC/Usersのリダイレクトは、下記の仕様になっています。
- 認証が必要なページにアクセスをした時に、認証していない場合は「
?redirect=http%3A%2F%2Fexample.com%2F
」のようにリダイレクト先を指定するパラメータが追加された URLのログイン画面に遷移する - 「redirect」パラメータが付いた状態でログイン認証を実行すると「redirect」で指定されているページにリダイレクトする
- 「redirect」がない場合は、「users.php」のリダイレクト設定に従ってリダイレクトをする
そのため、例えば、
http://example.com/
にアクセスします。でも、認証が必要なページのため
http://example.com/login?redirect=http%3A%2F%2Fexample.com%2F
にリダイレクトします。この場合、ログイン認証を通過すると
http://example.com/
に遷移します。
この記事で解説をした設定の場合は「users.php」の設定で「http://example.com/users/index/」にリダイレクトをする設定になっていますが、「redirect」のパラメータが付いていれば、ログイン後は「http://example.com/」にリダイレクトします。
基本的なリダイレクト先は「users.php」に指定しておき、クリックするリンクごとにリダイレクト先を指定したい場合は「redirect」パラメータで指定することもできるようになっています。
CakePHP4のCakeDC/Usersの関連記事
CakePHP4の CakeDC/Usersを使うために、基本となるインストールの方法から入力画面のテンプレートのカスタマイズや、リダイレクトの設定など、CakeDC/Usersに関する記事を下記に書いています。
あわせて参考にしてみてください。
CakePHP4のユーザ管理・ログイン認証プラグインCakeDC/Usersのインストール解説
CakePHP4のCakeDC/Usersの画面、メール本文テンプレートのカスタマイズ方法解説
CakePHP4のCakeDC/Usersのログイン時のリダイレクトとユーザ権限管理の設定解説
また、この記事を書くうえで参考にした記事は下記になります。
https://github.com/CakeDC/users/blob/600ea02a2053d51d55380cbb6122fb8a447d7f05/Docs/Documentation/Installation.md
https://github.com/CakeDC/users/blob/0c510044adffcbe66bff407b1cdbdd9f87d2476b/Docs/Documentation/Configuration.md
GoogleAdwords
GoogleAdwords
この記事が参考になったと思いましたらソーシャルメディアで共有していただけると嬉しいです!
関連記事
-
-
CakePHP3のメッセージ日本語化の設定(国際化と地域化の機能の使い方の解説)
CakePHP3の英語のメッセージを日本語化(多言語化)する手順を解説。オリジナルのメッセージを作成する方法やプログラムで文言を追加する場合の対応なども解説。
-
-
CakePHP3のビューで受取ったテーブルのオブジェクトを連想配列に変換する方法
コントローラーからビューに送ったテーブルのオブジェクトを連想配列に変換し、ビューの中で自由に使えるようにするメソッド「toArray()」の解説。連想配列に変換できれば利用度アップ!
-
-
CakePHP 2.3 Search Pluginで検索処理 その7queryを使って 日付の範囲検索
CakePHPの検索プラグイン Search Pluginの検索処理の中で queryを使って日付の範囲検索の方法です。
-
-
CakePHP3のプラグイン「CakeDC/Users」を日本語化・翻訳ファイルもダウンロード可
CakePHP3のユーザ管理、ログイン認証プラグインである「CakeDC/Users」のメッセージを日本語にする手順の解説とともに、日本語の翻訳ファイルを提供。ファイルを設置すれば日本語になる!
-
-
CakePHP3にデイトピッカー jQuery UI DatePickerを実装する手順の解説
CakePHP3にjQuery UIのDatePickerを実装する手順を説明。併せて、デイトピッカーを設置に関連するCakePHP3の解説と、テーマを変更したり、表記を変更するカスタマイズする方法なども紹介。
-
-
CakePHP3で環境変数を設定して本番環境と開発環境を分けて処理をする場合
CakePHP3で開発環境と本番環境とで違う設定ファイルを読み込ませて環境ごとに定数を切り替える方法を解説。Apacheのhttpd.confに環境変数を設定し、それを読み込み判別する。
-
-
CakePHP3で Ajaxを使う方法の解説。3.6以降対応。Successとthenの両方を解説。
CakePHP3でajaxを利用する処理の実装方法を解説。プルダウンを変更するとデータベースの値を取得し検索結果の内容を変更するというような処理を想定。CakePHP3.6以降の CSRF対策対応済。
-
-
CakePHPで favicon.icoやapple-touch-icon-144-precomposed.pngが could not be foundのエラーが出るときの対処方法
CakePHPで「CakeDC/Users」などルーティングを行うプラグインを利用するときに、favicon.icoやapple-touch-icon-144-precomposed.pngがNotFoundエラーになることがある。その対処方法の解説。
-
-
CakePHP 2.3でOn Duplicate Key構文を実装
CakePHPで On Duplicate Key構文を Queryを利用して実装する方法をサンプルソース付きで解説します。
-
-
CakePHP4のCakeDC/Usersの画面、メール本文テンプレートのカスタマイズ方法解説
CakeDC謹製Usersプラグインの紹介。ユーザ新規登録の流れを紹介しつつ、テンプレートファイル、設定情報ファイルの場所とそれらをカスタマイズする方法を説明します。