CakePHP4のCakeDC/Usersのログイン時のリダイレクトとユーザ権限管理の設定解説
2023/12/28
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」ファイルを新規作成し、下記の内容を記述します。
<?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行目の記述を追加します。
// 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」ファイルを新規作成し、下記の内容を記述します。
<?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
CakePHP4の関連記事
CakePHPのpostlinkで生成した削除リンクをクリックしても処理が実行されない対処法CakePHP4系でJSONレスポンスの処理ではwithStringBodyを使う。3との違い解説
CakePHP4、CakePHP5の「warning: DebugKit is disabling...」の対処方法
MySQL+CakePHPのdate型、datetime型項目は「2999-12-31」までしか扱えない
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」に関する記事一覧
この記事が参考になったと思いましたらソーシャルメディアで共有していただけると嬉しいです!
関連記事
-
-
CakePHP 2.3でOn Duplicate Key構文を実装
CakePHPで On Duplicate Key構文を Queryを利用して実装する方法をサンプルソース付きで解説します。
-
-
CakePHP 2.3 Model、Controllerの見たい変数の中身をログ出力
CakePHPの Modelや Controllerの変数の中身をログとして出力して見る方法を提供します。
-
-
CakePHP 2.3 連携先のテーブルの項目で条件抽出する場合
アソシエーション(連携)している先のテーブルの項目で条件抽出する際の考え方と注意点をサンプルソースを用いて説明しています。
-
-
CakePHPで Auto Incrementを外すと Duplicate entry ‘0’ for keyのエラーが出るかも
CakePHPでAuto Incrementの設定を変更したときに「Duplicate entry ‘0’ for key」のエラーが出た。原因はModel内で IDを編集する処理の追加を忘れていたからだった。
-
-
CakePHP3のデバッグキット(DebugKit)を強制的に有効、無効に変更する方法
CakePHP3に付属しているデバッグのためのツール、デバッグキットを強制的に有効化、無効化する方法を解説。初期設定では開発環境としてありそうなドメインの場合のみ有効になるように設定されている。
-
-
CakePHP3でユーザ定義の定数、変数を設定し、読み込む方法解説
CakePHP3で定数や共通で使う変数をまとめて設定し、プログラム内で読み込む方法を、bootstrap.phpに直接記述する方法と定数ファイルを分ける方法の3つの方法で解説。
-
-
CakePHP 2.3で PDFを作成する方法を調査「mpdf」「TCPDF」「FPDF」
CakePHPで PDFを編集、出力するには「mpdf」「TCPDF」「FPDF」といったプラグインがあり、使い勝手を比較検討しました。TCPDFが一番良さそうでした。
-
-
CakePHP3のCakeDC/Users、Authでログインなしでもアクセスを許可する設定
CakePHP3の Authコンポーネントや CakeDC/Usersプラグインなどを利用したユーザ管理・認証システムにおいて、ログインしていなくても見ることができるページの設定方法を解説。
-
-
CakePHP3でページごとに読み込むJavaScript、CSSを変える処理の解説
CakePHP3でJavaScriptやCSSを編集する基本形から、それらやテンプレート(エレメント)を特定のテンプレートを読み込んだときのみ編集、実行するための方法、ブロック化について解説。
-
-
CakePHP3のタイムゾーンを協定世界時UTCから日本標準時間JSTにずれを変更する方法
CakePHP3の標準設定のタイムゾーンは「UTC(協定世界時)」に設定されている。これを日本標準時に変更する方法(app.php、bootstrap.phpの変更方法)の解説。