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でPHPExcelを使ってエクセルファイルを生成、出力する方法
CakePHP3でPHPExcelを利用してエクセルを編集、出力するサンプルソース+解説。PHPExcelのインストール方法の解説からファイル保存とダウンロードの方法なども解説。
-
-
CakePHP 2.3 デバッグキット(DebugKit)超初心者向けフォロー講座
CakePHP初心者に向けてデバッグキット(DebugKit)のインストール方法、はまりポイントを解説。
-
-
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エラーになることがある。その対処方法の解説。
-
-
CakePHP3のHtmlHelperのLink設定のまとめ。mailto、URL、Root/Homeのリンクなども
CakePHP3でHtmlHelperを使ってリンクの設定をする方法のまとめ。基本形からURLを指定、class、id、targetを指定、mailtoのリンク、画像をアンカーに、JavaScriptのダイアログなどの解説。
-
-
CakePHP 2.3で確認画面付きのお問い合わせフォームの作り方
CakePHPで確認画面付きのお問い合わせフォーム、メールフォームの作り方をサンプルを提示しながら解説。
-
-
CakePHP3のCakeDC/Usersのログイン後のリダイレクトとユーザ権限管理の設定解説
CakeDC謹製Usersプラグインの紹介。ログイン認証後にリダイレクトする先の設定方法についての解説と実運用するために必要なコツを解説。便利な仕組みも仕様の理解があって初めてうまく使いこなせる。
-
-
CakePHP 2.3 Search Pluginで検索処理 その7queryを使って 日付の範囲検索
CakePHPの検索プラグイン Search Pluginの検索処理の中で queryを使って日付の範囲検索の方法です。
-
-
CakePHP 2.3 Search Pluginで検索処理 その4前方一致検索、後方一致検索、不等号による検索、between句による範囲検索
CakePHPの検索プラグイン Search Pluginの検索処理の中で前方一致検索、後方一致検索、不等号による検索、between句による範囲検索の解説です。
-
-
CakePHP 2.x系 Viewでのコメントの記述方法など
CakePHPにおいて View、ctpファイルでコメントを記述する方法を解説。
-
-
CakePHP3、CakePHP4のdatetime型カラムの日時の扱い。秒まで表示する方法
CakePHP3の日時カラムで秒まで扱う場合はdate()、strtotime()関数ではうまくいかない。CakePHP3であらかじめ用意された「i18nFormat()」を使用する。