CakePHP3のCakeDC/Users、Authでログインなしでもアクセスを許可する設定
2019/03/16
CakePHP3のユーザ管理・認証システムでログインなしでもアクセスを許可する設定
CakePHP3の CakeDC/Usersプラグインを利用して、ユーザ管理・認証システムを構築してする際に、ログインしていなくてもアクセスをできるページを設定する方法を解説します。
実際の検証では、CakePHP3の CakeDC/Usersプラグインを利用したユーザ管理・認証システムを作成中に確認していますが、AuthComponentによる認証処理は CakePHP3の標準のものと変わらないはずですので、同じように設定ができると思います。
(同じように設定できない場合は連絡をお願いします。)
各コントローラーに $this->Auth->allow()を記述
アクセスがあった場合、ユーザ認証をしていなくてもページを表示させる許可を設定する場合は、下記の様に記述します。
記述するファイルは、許可を与えるコントローラーのファイルです。
|
1 2 3 4 5 6 |
public function beforeFilter(Event $event){ parent::beforeFilter($event); // 認証なしでアクセスできるアクションの指定 $this->Auth->allow(["index","add"]); } |
5行目を追加することで、記述したコントローラー内のアクションに対して、ログインしていなくてもアクセスをする許可を与えることができます。
上記の記述をする際、下記の use句が記述されているかも確認してください。
|
1 |
use Cake\Event\Event; |
この use句がないと下記のエラーが発生します。
逆に、下記のエラーが発生している場合は、use句が記述されているかを確認してください。
Strict (2048): Declaration of App\Controller\PagesController::beforeFilter() should be compatible with App\Controller\AppController::beforeFilter(Cake\Event\Event $event) [APP/Controller\PagesController.php, line 30]
また、細かくは下記の様に該当のアクションを指定することができます。
|
1 2 3 4 5 6 7 8 |
// すべてのアクションを許可する場合 $this->Auth->allow(); // index アクションのみ許可する場合 $this->Auth->allow("index"); // view と index アクションのみ許可する場合 $this->Auth->allow(["index","add"]); |
AppController.phpに $this->Auth->allow()をまとめて記述
先の設定方法では、各コントローラーに「$this->Auth->allow()」を記述していく必要がありますので、大きなシステムになった場合、管理が面倒になります。
開発途中で、ログインなしでもアクセスできるページを確認しようとする場合、各コントローラーのファイルを確認する必要があるためです。
これを解消するためには、/src/Controller/AppController.phpに下記の様に設定を行う方法があります。
|
1 2 3 4 5 6 7 8 9 10 11 12 |
public function beforeFilter(){ if ($this->request->controller == "Topics"){ $this->Auth->allow(["index","add"]); } } // CakePHP3.4 以降の推奨の書き方 public function beforeFilter(){ if ($this->request->getParam("controller") == "Topics"){ $this->Auth->allow(["index","add"]); } } |
「$this->Auth->allow(["home","index"]);」の部分は、先に紹介した各コントローラーに記述方法と同じで、パラメーターに設定する内容も、アクションの指定をしない設定方法も同じです。
また、コントローラーの指定を下記の様に「in_array()」関数を使えば、複数のコントローラーをまとめて設定することも可能になります。
|
1 2 3 4 5 6 7 8 |
if (in_array($this->request->controller,["Topics","News"]) ) { $this->Auth->allow(); } // CakePHP3.4以降推奨の書き方 if (in_array($this->request->getParam("controller"),["Topics","News"]) ) { $this->Auth->allow(); } |
「$this->request->controller」は、動作しているコントローラー名を取得する処理ですが、詳しくは「CakePHP3で現在処理しているコントローラー名、アクション名を取得する方法」に記事を書いていますので、あわせて参考にしてください。
また、CakePHP3.4以降では「$this->request->getParam("controller")」の記述方法が採用されました。
今後はこの記述方法が推奨され、CakePHP3.7以降では「$this->request->controller」を記述では、「Deprecated (16384): Accessing routing parameters through 」のエラーが出るようになりました。controller will removed in 4.0.0. Use getParam() instead.
ちなみに、上記の例では、「コントローラー:Topics」「アクション:index、add」に許可を与える設定になっています。
また、「/topics/inde」を「/」にルーティング設定をしている場合は、「/topics/inde」と「/」のいずれもログインしていなくても表示されるページとなります。
参考サイトは CakePHP3の Cookbook
最後になりましたが、ここで解説をした内容は、下記のオフィシャルの Cookbookを参考にしています。
リクエストとレスポンスオブジェクト
https://book.cakephp.org/3.0/ja/controllers/components/authentication.html#id28
GoogleAdwords
GoogleAdwords
この記事が参考になったと思いましたらソーシャルメディアで共有していただけると嬉しいです!
関連記事
-
-
CakePHP3のCakeDC/Usersでログインユーザの所有レコードのみ更新、削除する権限管理の設定方法
CakePHP3のユーザ管理、ログイン認証プラグイン「CakeDC/Users」の権限管理を行う方法やアクセスできるコントローラー、アクションを設定、所有権を持つレコードのみ更新できる設定方法を解説。
-
-
CakePHP4、5のnewEmptyEntityで作成したオブジェクトは空なのか、確認してみた
CakePHPでレコードを新規登録をする際にnewEmptyEntity()を使って空のEntityを作成するが、これのempty、is_nullなどのでの判定結果がtrueかfalseか確認してみた。
-
-
CakePHP3の1対多での連携を中間テーブルを使った多対多の連携に変更するときの手順
CakePHP3で「1対多」の連携を中間テーブルを利用した「多対多」の連携に変更するときの手順のまとめ。中間テーブルの設定やModelの変更などを間違いやすい箇所を指摘しながらの解説。
-
-
CakePHP4のユーザ管理・ログイン認証プラグインCakeDC/Usersのインストール解説
CakePHP4のユーザ管理プラグイン Usersは、ユーザ登録、メール認証、ログイン認証、ユーザ管理、権限管理、reCAPTCHAなど会員制のサイトを簡単に実現可能。その導入方法、カスタマイズ方法を解説。
-
-
CakePHP 2.3で PDFを作成する方法を調査「mpdf」「TCPDF」「FPDF」
CakePHPで PDFを編集、出力するには「mpdf」「TCPDF」「FPDF」といったプラグインがあり、使い勝手を比較検討しました。TCPDFが一番良さそうでした。
-
-
CakePHP3で Ajaxを使う方法の解説。3.6以降対応。Successとthenの両方を解説。
CakePHP3でajaxを利用する処理の実装方法を解説。プルダウンを変更するとデータベースの値を取得し検索結果の内容を変更するというような処理を想定。CakePHP3.6以降の CSRF対策対応済。
-
-
国際化と地域化の翻訳機能「__()」を使って定数に変数を埋め込む方法
CakePHP4で定数に変数を埋め込み、翻訳機能「__()」で変数に値を入れる方法を紹介。定型の文章の一部だけを置換したい場合に利用すると便利。
-
-
CakePHP4で現在処理しているコントローラー名、アクション名を取得する方法
CakePHP3で現在処理しているコントローラー名、アクション名を取得する方法を解説。複数の方法があるが、getParam()メソッドを使う方法が汎用性があって便利かも。
-
-
CakePHP3で他のテーブルのマスタテーブルからセレクトボックス(プルダウンリスト)を作る
他のテーブルのマスタのレコードからプルダウンリストを作成し、選択できるようにするサンプルプログラムと解説。ORMの設定によりデータベースの値を取得し、配列を作成し optionsに与える。
-
-
CakePHP3のプラグイン「CakeDC/Users」を日本語化・翻訳ファイルもダウンロード可
CakePHP3のユーザ管理、ログイン認証プラグインである「CakeDC/Users」のメッセージを日本語にする手順の解説とともに、日本語の翻訳ファイルを提供。ファイルを設置すれば日本語になる!