エス技研

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のビューで受取ったテーブルのオブジェクトを連想配列に変換する方法
CakePHP3のビューで受取ったテーブルのオブジェクトを連想配列に変換する方法

コントローラーからビューに送ったテーブルのオブジェクトを連想配列に変換し、ビューの中で自由に使えるようにするメソッド「toArray()」の解説。連想配列に変換できれば利用度アップ!

MySQL+CakePHPのdate型、datetime型項目は「2999-12-31」までしか扱えない
MySQL+CakePHPのdate型、datetime型項目は「2999-12-31」までしか扱えない

CakePHPの日付、日時の型であるdate型、datetime型の最大値は2999-12-31となっている。MySQLは9999年までなので違いがあるので注意が必要だ。

CakePHP5系でDeprecatedを回避しfindListでキーと値のカラムを指定して取得する方法
CakePHP5系でDeprecatedを回避しfindListでキーと値のカラムを指定して取得する方法

CakePHP4のfindListでキーと値のカラムを指定してテーブルにアクセスする方法がCakePHP5では「Deprecated(非推奨)」となった。推奨の記述方法を解説。

CakePHP3のHtmlHelperのLink設定のまとめ。mailto、URL、Root/Homeのリンクなども
CakePHP3のHtmlHelperのLink設定のまとめ。mailto、URL、Root/Homeのリンクなども

CakePHP3でHtmlHelperを使ってリンクの設定をする方法のまとめ。基本形からURLを指定、class、id、targetを指定、mailtoのリンク、画像をアンカーに、JavaScriptのダイアログなどの解説。

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

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

CakePHP 2.3 コマンドラインからPHPのシェル実行の方法解説

CakePHP 2.3でコマンドラインから CakePHPで記述した処理を実行する方法を解説します。

CakePHP3のOGPはHTMLヘルパーの$this->Html->meta()を使って設定
CakePHP3のOGPはHTMLヘルパーの$this->Html->meta()を使って設定

CakePHP3でOGPを設定する方法を解説。metaタグを編集するHTMLヘルパーを利用してOGPのタグを編集する。また、エレメントとして分割することでメンテナンス性も向上させる。

CakePHP4、CakePHP5の「warning: DebugKit is disabling...」の対処方法
CakePHP4、CakePHP5の「warning: DebugKit is disabling...」の対処方法

CakePHPのデバッグ用のツールであるDebugKitは適切な設定をしないとエラーログにワーニングメッセージが出力される。それを解消する方法を解説。

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

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

CakePHP2の検索Plugin CakeDC/Searchで重複を省くgroup by(distinct)の実装方法
CakePHP2の検索Plugin CakeDC/Searchで重複を省くgroup by(distinct)の実装方法

CakePHP2の検索プラグイン「CakeDC/Search」で、重複レコードを省くgroup by、distinctを使う方法についての解説。設定する場所はpaginatorの条件とするので、find()関数と同じ。