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にデイトピッカー jQuery UI DatePickerを実装する手順の解説
CakePHP3にjQuery UIのDatePickerを実装する手順を説明。併せて、デイトピッカーを設置に関連するCakePHP3の解説と、テーマを変更したり、表記を変更するカスタマイズする方法なども紹介。
-
-
CakePHP3にOGPをfetch、asignを利用してテンプレートごとに指定する方法を解説
CakePHP3でOGPを設定する方法を解説。fetch、assignを使用しレイアウトファイルに編集した変数にテンプレートファイルから値を指定する。これを利用してOGPを編集する。
-
-
CakePHP3のfriendsofcake/searchでブックマークチュートリアルのタグ検索を実装
CakePHP3のCookbookにあるブックマークチュートリアル。ここで紹介されているタグで検索する処理を検索プラグイン「friendsofcake/search」で実現する方法を解説しました。
-
-
CakePHP3にWYSIWYGエディタのCKEditor4を設置、カスタマイズ方法を解説
WYSIWYGエディタであるCKEditor4をCDNを利用して簡単にCakePHP3に導入する方法とカスタマイズする方法を解説。CakePHP3にはページごとの振り分けを行うブロック化を利用する。
-
-
CakePHP3チュートリアルで日付と時刻のDateTimeでエラーが出たときの対処方法
CakePHP3のブックマークチュートリアルには記載ミスもあり、そのまま動かない個所もある。CakePHP3では namespaceを使うようになったので、classを呼び出すときに¥を追加する必要が!
-
-
CakePHP3でパンくずの指定は HTMLヘルパーを使って指定する方法を解説
CakePHP3でパンくずの指定方法の解説。2つのヘルパーがあるが簡単なHTMLヘルパーを使った方法を、実際の状況に合わせて3つのパターン(エレメント化、ブロック化)にして解説。
-
-
CakePHP3で他のテーブルのマスタテーブルからセレクトボックス(プルダウンリスト)を作る
他のテーブルのマスタのレコードからプルダウンリストを作成し、選択できるようにするサンプルプログラムと解説。ORMの設定によりデータベースの値を取得し、配列を作成し optionsに与える。
-
-
CakePHP3のインストールでURL rewriting……のエラーが!その解決方法解説
CakePHP3をインストールしたら URL rewriting is not properly configured.のエラーが。原因は.htaccessが有効になっていないこと。httpd.confに設定を追加すればOK。
-
-
CakePHP 2.3 主キー(ID)以外のキーで更新方法 updateAll
主キー(ID)以外のカラムをキーとして更新する方法、updateAllの使い方をサンプルを用いて解説します。
-
-
CakePHP3のタイムゾーンを協定世界時UTCから日本標準時間JSTにずれを変更する方法
CakePHP3の標準設定のタイムゾーンは「UTC(協定世界時)」に設定されている。これを日本標準時に変更する方法(app.php、bootstrap.phpの変更方法)の解説。