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
この記事が参考になったと思いましたらソーシャルメディアで共有していただけると嬉しいです!
関連記事
-
Google Analytics APIを CakePHP3で動かしてレポートデータを取得する方法の解説
CakePHP3で Google Analytics APIからレポートデータを取得する処理の解説。PHPのサンプルソースをCakePHP3で動くように改造。加えて、ディメンションやメトリックスを条件に設定する方法なども。
-
CakePHP 2.3 Search Pluginで検索処理 その4前方一致検索、後方一致検索、不等号による検索、between句による範囲検索
CakePHPの検索プラグイン Search Pluginの検索処理の中で前方一致検索、後方一致検索、不等号による検索、between句による範囲検索の解説です。
-
CakePHP3でassociatedを使って関連データをまとめて保存する方法(hasOne、hasMany、belongsTo)
CakePHP3で関連データをまとめて保存する方法。hasOne、hasMany、belongsTo等の関連データはassociatedを追加することでまとめて保存することができます。
-
Windows上のXAMPP環境のCakePHPのコマンド実行時に環境変数を指定する方法
CakePHP4のコマンド(シェル)に対して、環境変数を指定して実行する方法を解説。LinuxとWindows上のXAMPPとでは記述方法が異なるため、Windowsのsetコマンドについても詳細解説。
-
CakePHP3のCakeDC/Usersのバリデーションのカスタマイズ方法解説
CakeDC謹製Usersプラグインの紹介。Usersのカスタマイズとして入力項目のバリデーションの変更を、プラグインのファイルは触らずオーバーライドにより実装する方法を解説する。
-
CakePHP3でWarning Error: SplFileInfo::openFile()エラーが発生した場合の対処方法
CakePHP3のキャッシュファイルのパーミッションエラー Error: SplFileInfo::openFile()が発生した場合の対応方法解説。app.phpにキャッシュファイルのパーミッション設定を行い、既存のファイルは削除。
-
CakePHP3チュートリアルで日付と時刻のDateTimeでエラーが出たときの対処方法
CakePHP3のブックマークチュートリアルには記載ミスもあり、そのまま動かない個所もある。CakePHP3では namespaceを使うようになったので、classを呼び出すときに¥を追加する必要が!
-
CakePHP 2.3 bakeの超初心者向けフォロー講座
CakePHP 2.3 bakeの超初心者向けフォロー講座
-
CakePHP4でロギングスコープやログレベルを使用してログを出し分ける方法を解説
CakePHPのログ出力方法の解説。app.phpにログ設定をし、スコープやレベルを指定してログ出力を振り分ける方法、CakePHP4で配列出力にはvar_exportが必要なことなどを解説。
-
CakePHP3のUpload Plugin 3.0をバリデーションなど実運用向けのカスタマイズ方法解説・その2
CakePHP3でファイル、画像をアップロードするプラグイン、upload plugin 3を導入する手順を解説した記事。3部作のその2でバリデーションなどの実用的なカスタマイズ方法を解説。