エス技研

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の関連記事

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のOGPはHTMLヘルパーの$this->Html->meta()を使って設定
 
その他の「CakePHP3」に関する記事一覧
 
 

 - CakePHP 2.x 3.x

GoogleAdwords

GoogleAdwords

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

Message

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

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

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

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

  関連記事

CakePHP3のメッセージ日本語化の設定(国際化と地域化の機能の使い方の解説)
CakePHP3のメッセージ日本語化の設定(国際化と地域化の機能の使い方の解説)

CakePHP3の英語のメッセージを日本語化(多言語化)する手順を解説。オリジナルのメッセージを作成する方法やプログラムで文言を追加する場合の対応なども解説。

CakePHP3のCakeDC/Usersの画面、メール本文テンプレートのカスタマイズ方法解説
CakePHP3のCakeDC/Usersの画面、メール本文テンプレートのカスタマイズ方法解説

CakeDC謹製Usersプラグインの紹介。ユーザ新規登録の流れを紹介しつつテンプレートファイルがどこにあるか、設定情報ファイルがどこにあるか、を説明しつつカスタマイズの方法を解説します。

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

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

CakePHP3チュートリアルで日付と時刻のDateTimeでエラーが出たときの対処方法
CakePHP3チュートリアルで日付と時刻のDateTimeでエラーが出たときの対処方法

CakePHP3のブックマークチュートリアルには記載ミスもあり、そのまま動かない個所もある。CakePHP3では namespaceを使うようになったので、classを呼び出すときに¥を追加する必要が!

CakePHP3のInsert On Duplicate Key Update(upsert)構文を解説・バルク処理も
CakePHP3のInsert On Duplicate Key Update(upsert)構文を解説・バルク処理も

CakePHP3で Insert … On Duplicate Key Update構文(upsert)を実行する方法を解説。バルク処理の方法も用意されているため大量処理の場合も対応可能。

CakePHP3で Ajaxを使う方法の解説。3.6以降対応。Successとthenの両方を解説。
CakePHP3で Ajaxを使う方法の解説。3.6以降対応。Successとthenの両方を解説。

CakePHP3でajaxを利用する処理の実装方法を解説。プルダウンを変更するとデータベースの値を取得し検索結果の内容を変更するというような処理を想定。CakePHP3.6以降の CSRF対策対応済。

CakePHP3ログファイルの出力方法・$this->log()の解説
CakePHP3ログファイルへの出力・$this->log()、独自ログへの出力方法の解説

コントロール、モデルの変数の中身を見るときはログに出力する方法が有効です。$this->log()を利用すると変数だけじゃなく、連想配列、オブジェクトも簡単にログ出力ができます。

CakePHP 2.3 デバッグキット(DebugKit)超初心者向けフォロー講座

CakePHP初心者に向けてデバッグキット(DebugKit)のインストール方法、はまりポイントを解説。

CakePHP3の更新画面でUpload Plugin 3.0を使う方法、viewで使う方法解説・その3
CakePHP3の更新画面でUpload Plugin 3.0を使う方法、viewで使う方法解説・その3

CakePHP3でファイル、画像をアップロードするプラグイン、upload plugin 3を導入する手順を解説した記事。3部作のその3で記事を更新する際のファイルの取り回しなどについてを解説。

CakePHP 2.3 ログイン、操作履歴、アクセスログ出力

CakePHPでログインや操作履歴などのアクセスログ出力処理を作成します。