エス技研

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


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

      2019/03/25

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

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

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

 

1.bootstrap.phpを編集

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

 
追記する場所は「CakePHP3のユーザ管理・ログイン認証プラグインCakeDC/Usersのインストール解説・3.6以降対応」で、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以降対応
 CakePHP3のCakeDC/Usersの画面、メール本文テンプレートのカスタマイズ方法解説
 CakePHP3のCakeDC/UsersのUserHelperでログアウトやreCAPTCHAをカスタマイズ
 Google reCAPTCHAのSite key、Secret keyの取得方法・20170408バージョン
 CakePHP3のCakeDC/Usersのバリデーションのカスタマイズ方法解説
 
 

CakePHP3の関連記事

CakePHP4のCSS、JavaScript、画像のブラウザへのキャッシュをコントロールする
CakePHP3でレコードを保存(追加、更新、Insert、Update)する複数の方法を紹介
CakePHP3でモデルなしフォームからCSVをアップロードしレコードを更新する方法解説
CakePHP3でPHP Simple HTML DOM Parserを使ってスクレイピングする方法
CakePHP3のInsert On Duplicate Key Update(upsert)構文を解説・バルク処理も
CakePHP3の1対多での連携を中間テーブルを使った多対多の連携に変更するときの手順
CakePHP3でデフォルトのソート条件を設定してユーザの選択肢たソート条件を有効にする方法
CakePHP3で Ajaxを使う方法の解説。3.6以降対応。Successとthenの両方を解説。
CakePHP3でパンくずの指定は HTMLヘルパーを使って指定する方法を解説
CakePHP3にOGPをfetch、asignを利用してテンプレートごとに指定する方法を解説
 
その他の「CakePHP3」に関する記事一覧
 
 

 - CakePHP 3.x 4.x 5.x

GoogleAdwords

GoogleAdwords

最後までお読みいただきましてありがとうございます。
この記事が参考になったと思いましたらソーシャルメディアで共有していただけると嬉しいです!

Message

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

下記の空欄を埋めてください。 * Time limit is exhausted. Please reload CAPTCHA.

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

※入力いただいたコメントは管理者の承認後に掲載されます。

  関連記事

CakePHP3でassociatedを使って関連データをまとめて保存する方法(hasOne、hasMany、belongsTo)

CakePHP3で関連データをまとめて保存する方法。hasOne、hasMany、belongsTo等の関連データはassociatedを追加することでまとめて保存することができます。

CakePHP4のフラッシュメッセージの表示場所、デザインを変更する方法を解説
CakePHP4のフラッシュメッセージの表示場所、デザインを変更する方法を解説

CakePHP4のエラーメッセージ、完了メッセージなどを表示するフラッシュ処理の解説。Controller、レイアウトファイル、テンプレートファイルでそれぞれ処理を指定する。

CakePHP4、CakePHP5系の認証処理でログインの有無の確認、ユーザ情報の取得の方法
CakePHP4、CakePHP5系の認証処理でログインの有無の確認、ユーザ情報の取得の方法

CakePHP4系、5系のログイン認証の可否のチェック、および、ログインユーザの情報を取得する方法のまとめ。複数の方法があるが手続きが微妙に異なるためまとめてみた。

CakePHP3でアソシエーション先のカラムでデータをソートして取得したい
CakePHP3でアソシエーション先のカラムでデータをソートして取得したい

アソシエーション先のテーブルのカラムをキーにソートをしたデータを取得したい!ときの記述方法を解説。「orderAsc()」ではなく「contain()」の中にSort条件を記述する。

CakePHP3のルーティング(routes.php)の変更が反映されない時はキャッシュのクリアを
CakePHP3のルーティング(routes.php)の変更が反映されない時はキャッシュのクリアを

CakePHP3でルーティングの設定変更をしたけど反映されない!そんなときは慌てず騒がずキャッシュをクリアしよう!ルーティングの設定もキャッシュされることがあるらしい。

CakePHP4のcake cache clear_allでPermission deniedはパーミッションの変更が必要
CakePHP4のcake cache clear_allでPermission deniedはパーミッションの変更が必要

CakePHP4でキャッシュをクリアするコマンドcake cache clear_allでPermission deniedのエラーが出るのはcakeにパーミッションが足りないとき。その対処方法を解説。

CakePHP4のController内でViewテンプレート、レイアウトの変更設定を記述する方法
CakePHP4のController内でViewテンプレート、レイアウトの変更設定を記述する方法

CakePHP4でテンプレートやレイアウトファイルをデフォルトから変更する場合は「render()」を使用するが、記述場所はできるだけコントローラー内の最後の方に書く方がいい。

CakePHP3で画像・ファイルのアップロード処理を自作・解説付き・その2
CakePHP3で画像・ファイルのアップロード処理を自作・解説付き・その2

ファイルのアップロード機能の自作サンプルコードとその解説のその2。アップロード機能に関連するファイルの更新や削除の処理や画像、フォルダのパスの指定方法などを含めて解説。

CakePHP3にデイトピッカー jQuery UI DatePickerを実装する手順の解説
CakePHP3にデイトピッカー jQuery UI DatePickerを実装する手順の解説

CakePHP3にjQuery UIのDatePickerを実装する手順を説明。併せて、デイトピッカーを設置に関連するCakePHP3の解説と、テーマを変更したり、表記を変更するカスタマイズする方法なども紹介。

CakePHPを学ぶ際にはオブジェクト指向を学ぼう

CakePHPはオブジェクト指向で書かれていますので、CakePHPを学ぶにはオブジェクト指向も学びましょう。