エス技研

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


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

      2019/03/25

CakeDC/Usersのリダイレクト設定解説

 
CakePHP3のユーザ管理・認証プラグイン CakeDC/Usersの導入・機能解説・3.6.0以降対応」の記事で、CakePHP3で CakeDC/Usersを使ってログイン認証機能を実装し、実際にログインを実施してみました。
果たしてログイン後はどこの画面に遷移するでしょうか?
 
今回の記事では、そのログイン後に遷移する画面(リダイレクトする画面)を設定する方法を解説します。
 
 

CakeDC/Usersのログイン後のリダイレクト設定

 

1.bootstrap.phpを編集

 
最初にリダイレクトの設定情報を記述する設定ファイルの情報を「bootstrap.php」に追記します。
 
編集するファイルは下記になります。
/config/bootstrap.php
 
下記の 1行目の記述を追加します。

 
追記する場所は「CakePHP3のユーザ管理・認証プラグイン CakeDC/Usersの導入・機能解説・3.6.0以降対応」で、CakeDC/Usersをインストールしたときに追記した、2行目のプラグインをロードする「Plugin::load...」の前に記述をします。
「Configure::write...」と「Plugin::load...」の順番は重要な意味を持ちますので、順番を間違えないように記述します。
 
 

2.users.phpを作成、編集

 
続いて、前項で追記した内容に該当する設定ファイル「users.php」を作成し、内容を編集します。
 
作成し、編集するファイルは、以下となります。
このファイルは、新規で作成をします。
/config/users.php
 
編集する内容は、以下になります。

 
この編集する内容の基本形は、プラグインの設定情報ファイルである「/vendor/cakedc/users/config/users.php」にありますので、必要に応じてコピペすると楽に設定できます。
 
28~30行目がリダイレクトする URLの指定です。
上記の設定は、下記の URLにリダイレクトする設定になっています。
 http://example.com/users/users/
 
また、32~36行目がログアウトしたときにリダイレクトする URLの指定です。
上記の設定は、トップページにリダイレクトするようになっています。
 
 

2.permissions.phpを作成、編集

 
パーミッションの設定を行う「permissions.php」を作成し、内容を編集します。
 
パーミッションの設定は、ユーザのロール(role、権限)に対してどのページを表示させることができるか、という設定を行うもので、この設定を正しく行わないとリダイレクト先のページが表示されない場合も出てきます。
 
編集するファイルは、以下となります。
ファイルがない場合は新規作成します。
/config/permissions.php
 
 
編集する内容は、以下になります。

 
上記の設定は、「*」を指定することで、すべてのコントロール、すべてのアクションを対象にアクセスを可能にする設定で、「user」も「superuser」もすべてのページにアクセスする権限を割り当てています。
 
アクセスできるページを制限する場合は、下記のような形でページを指定します。
 

 
permissions.phpの標準設定は、下記のファイルにありますので、あわせて参考にしてください。
/vendor/cakedc/users/config/permissions.php
 
 


 

CakeDC/Usersのリダイレクトの特性を理解する上で大事なポイント

 

CakeDC/Usersのリダイレクト設定の仕様

 
CakeDC/Usersのリダイレクト設定には非常に悩ましい事象があります。
リダイレクト設定をしていても想定しているページにリダイレクトしない、という事象です。
 
ただ、これは、CakeDC/Usersのリダイレクトの仕組みですので、そういうものだという理解をする必要がある内容です。
 
 
CakeDC/Usersのリダイレクトは、下記の仕組みになっています。

  • 認証が必要なページにアクセスをし、権限がないためにログインページにリダイレクトした場合は、ログイン認証が実行されると、ログイン前にリダイレクトしたページにリダイレクトする
  • 上記の設定がない場合は、リダイレクトの設定に従ってリダイレクトをする

 
そのため、例えば、
 
  http://example.com/
にアクセスします。でも、認証が必要なページのため
  http://example.com/login
にリダイレクトします。この場合、ログイン認証を通過すると
  http://example.com/
に遷移します。
 
この記事で解説をした「http://example.com/users/users/」にリダイレクトをする設定にしていたとしても、ログイン後は「http://example.com/」にリダイレクトするのです。
そのため、リダイレクト設定が正しく動作していないんじゃないか、という気になるのですが、ログイン画面「http://example.com/login」の前にアクセスしていた URLが「http://example.com/」であるため、正しい動きなのです。
「http://example.com/login」にリダイレクトした後にリロードしたり、ブラウザを閉じても動作は変わりません。
 
 
この記事で解説をしたリダイレクト設定を検証するには、
・検証に一度も使っていないブラウザを用意するか
・ブラウザのキャッシュをすべて削除するか
の対応を行う必要があります。
そのうえで、「http://example.com/」などリダイレクトする URLを入力せずに、直接「http://example.com/login」の URLを入力する、という方法が必要です。
 
その状態でログインすると、「/config/users.php」に設定したリダイレクトページに遷移します。
 
 

CakeDC/Usersのリダイレクトを実運用で活用するポイント

 
実運用上は、ユーザがわざわざブラウザを変えたり、キャッシュを削除してアクセスすることはないワケですので、設定しているリダイレクト処理はほぼ使われることはない、ということになるでしょう。
 
また、実運用上は、リダイレクトさせたいページがある場合は、リダイレクト設定をしたうえでログイン画面を呼び出すのではなく、リダイレクトさせたいページにリンクを張って、ログインページにリダイレクトさせる、という処理が必要になるのでしょう。
 
具体的には、「http://example.com/news/」にリダイレクトさせたいとしましょう。
 
その時は、「ログインページはこちら」のリンクは「http://example.com/login」ではなく、「http://example.com/news」に設定したうえで、リダイレクトして「http://example.com/login」に遷移するようにしておく、ということですね。
 
 
この仕様は一見するとややこしいように感じますが、ログイン認証を要求するリンクごとにログイン後にリダイレクトするページを指定することが簡単な仕様、ということになります。
 
具体的には、同じページの中でもそれぞれ認証が必要なページにリンクを設定します。
 ・マイページはこちら(http://example.com/mypage)
 ・ニュース更新はこちら(http://example.com/news)
この状態で、すでに認証を通っていればそのページに遷移しますが、認証が通っていなければログイン画面が出て、その後、それぞれのページに遷移する、ということです。
 
ブラウザをリロードしたり、ブラウザを閉じてもログイン後のリダイレクトする URLの情報は失われませんので、ログイン前にユーザの作業が中断しても、ログイン後は想定しているページにリダイレクトする安心な仕様になっています。
(これを安心な仕様とみるか、余計な仕様とみるか、判断は分かれると思いますが...)
 
 

permissions.phpの設定ミスでログアウトできない場合も

 
permissions.phpの設定を間違えて、ログアウトページにアクセスできない設定にしてしまうと、ログアウトができなくなります。
 
私が初めて CakeDC/Usersインストールしたとき、何も考えずに「superuser」でログインしたのですが、ログアウトの URLがそもそも分からなかったことと、permissions.phpの設定を間違えていたことで、ログアウトができずに困ったことがありました。
 
permissions.phpの設定は、十分に注意して設定し、十分な検証を実施しましょう。
 
 

CakePHP3のCakeDC/Usersの関連記事

 
CakePHP3の CakeDC/Usersを使うために、基本となるインストールの方法から入力画面のテンプレートのカスタマイズや、リダイレクトの設定など、CakeDC/Usersに関する記事を下記に書いています。
あわせて参考にしてみてください。
 CakePHP3のユーザ管理・認証プラグイン CakeDC/Usersの導入・機能解説・3.6.0以降対応
 CakePHP3のCakeDC/Usersの画面、メール本文テンプレートのカスタマイズ方法解説
 CakePHP3のCakeDC/UsersのUserHelperでログアウトやreCAPTCHAをカスタマイズ
 Google reCAPTCHAのSite key、Secret keyの取得方法・20170408バージョン
 CakePHP3のCakeDC/Usersのバリデーションのカスタマイズ方法解説
 
 

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のアソシエーション機能を使い関連レコードをまとめて削除

CakePHP3でレコードを削除する際に関連するレコードをまとめて削除する機能の解説。フレームワークのメリットを存分に発揮し、コマンドを1行追加するだけで実装可能。

CakePHP 2.3でファイルのアップロード処理を作る

CakePHPでプラグインを使わないファイルアップロード処理を解説します。簡単です。DBにファイルを格納する方法も。

CakePHP 2.3 Search Pluginで検索処理 その2表示件数を動的に変える方法

CakePHPの検索プラグイン Search Pluginの検索処理の中で動的に表示件数を変える方法です。

CakePHP3で静的ページの作成は webrootか pagesを使う。トップページを参考に解説
CakePHP3で静的ページの作成は webrootか pagesを使う。トップページを参考に解説

CakePHP3で静的なページを設置する場合の方法(webrootとpagesとを活用する方法)を解説。pagesの解説はデフォルトのトップページがどう表示されているかを参考に解説。ルーティングの機能も。

CakePHP3のメール送信の処理・テンプレート使用・添付ファイル送信も解説
CakePHP3のメール送信の処理・テンプレート使用・添付ファイル送信も解説

CakePHP3からメールを送信する方法解説。基本的な記述方法を基にして、テンプレートを使う方法、ファイルを添付する方法へと拡張しながら解説。

CakePHP3でシェルを作成しコマンドラインから実行・CakePHP2との違い
CakePHP3でシェルを作成しコマンドラインから実行・CakePHP2との違い

CakePHP3のシェルスクリプトを作成し、コマンドラインから実行する方法を解説。複数単語をつなげる場合の対応方法がCakePHP2より制限が厳しくなったのでCakePHP3の命名規則の確認が必要だ。

CakePHP 2.3 bakeの超初心者向けフォロー講座

CakePHP 2.3 bakeの超初心者向けフォロー講座

MySQL、CakePHP 2.3で「tinyint(1)」の Boolean型の動作を再確認

MySQL+CakePHPの環境で「tinyint(1)」を利用する際の動作を検証。「tinyint(1)」の Boolean型について CakePHPでは自動処理が実施されていることを確認しました。

CakePHP3のUpload Plugin 3.0をバリデーションなど実運用向けのカスタマイズ方法解説・その2
CakePHP3のUpload Plugin 3.0をバリデーションなど実運用向けのカスタマイズ方法解説・その2

CakePHP3でファイル、画像をアップロードするプラグイン、upload plugin 3を導入する手順を解説した記事。3部作のその2でバリデーションなどの実用的なカスタマイズ方法を解説。

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

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