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 bakeの超初心者向けフォロー講座
CakePHP 2.3 bakeの超初心者向けフォロー講座
-
-
CakePHP4のCakeDC/Usersの画面、メール本文テンプレートのカスタマイズ方法解説
CakeDC謹製Usersプラグインの紹介。ユーザ新規登録の流れを紹介しつつ、テンプレートファイル、設定情報ファイルの場所とそれらをカスタマイズする方法を説明します。
-
-
CakePHP3で Ajaxを使う方法の解説。3.6以降対応。Successとthenの両方を解説。
CakePHP3でajaxを利用する処理の実装方法を解説。プルダウンを変更するとデータベースの値を取得し検索結果の内容を変更するというような処理を想定。CakePHP3.6以降の CSRF対策対応済。
-
-
CakePHP 2.3 主キー(ID)以外のキーで更新方法 updateAll
主キー(ID)以外のカラムをキーとして更新する方法、updateAllの使い方をサンプルを用いて解説します。
-
-
CakePHP 2.3でOn Duplicate Key構文を実装
CakePHPで On Duplicate Key構文を Queryを利用して実装する方法をサンプルソース付きで解説します。
-
-
CakePHP2、CakePHP3、CakePHP4、CakePHP5のバージョンを調べる 2つの方法
CakePHPのバージョンの調べ方2点を紹介。CakePHP3~CakePHP5は共通だが CakePHP2はフォルダ構成が異なるためコマンドのパスもオプションも異なる。
-
-
CakePHP3でレコードを保存(追加、更新、Insert、Update)する複数の方法を紹介
CakePHP3でレコードを追加、更新(Insert、Update)する記述方法を解説。1件ずつ処理、全件をまとめて処理、条件に該当する複数件のレコードを処理方法をサンプルコードを用いて解説。
-
-
Windows環境の XAMPPを利用して CakePHPの開発する際の注意点
WindowsベースにXAMPPで環境を構築しCakePHP4を利用したWebシステムを構築する際は、大文字と小文字の違いを意識する必要がある。LinuxベースのWebサーバに移動させたときに不具合で動作しないこともある。
-
-
CakePHP4のユーザ管理・ログイン認証プラグインCakeDC/Usersのインストール解説
CakePHP4のユーザ管理プラグイン Usersは、ユーザ登録、メール認証、ログイン認証、ユーザ管理、権限管理、reCAPTCHAなど会員制のサイトを簡単に実現可能。その導入方法、カスタマイズ方法を解説。
-
-
CakePHP3のタイムゾーンを協定世界時UTCから日本標準時間JSTにずれを変更する方法
CakePHP3の標準設定のタイムゾーンは「UTC(協定世界時)」に設定されている。これを日本標準時に変更する方法(app.php、bootstrap.phpの変更方法)の解説。