エス技研

WordPress、CakePHP、PHP、baserCMSなどの Web系システムを中心に情報を提供します!


CakePHP3のCakeDC/Users、Authでログインなしでもアクセスを許可する設定

      2019/03/16

CakePHP3のユーザ管理・認証システムでログインなしでもアクセスを許可する設定

 
CakePHP3の CakeDC/Usersプラグインを利用して、ユーザ管理・認証システムを構築してする際に、ログインしていなくてもアクセスをできるページを設定する方法を解説します。
 
 
実際の検証では、CakePHP3の CakeDC/Usersプラグインを利用したユーザ管理・認証システムを作成中に確認していますが、AuthComponentによる認証処理は CakePHP3の標準のものと変わらないはずですので、同じように設定ができると思います。
(同じように設定できない場合は連絡をお願いします。)
 
 

各コントローラーに $this->Auth->allow()を記述

 
アクセスがあった場合、ユーザ認証をしていなくてもページを表示させる許可を設定する場合は、下記の様に記述します。
 
記述するファイルは、許可を与えるコントローラーのファイルです。
 

 
5行目を追加することで、記述したコントローラー内のアクションに対して、ログインしていなくてもアクセスをする許可を与えることができます。
 
上記の記述をする際、下記の use句が記述されているかも確認してください。

 
この 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]
 
 
また、細かくは下記の様に該当のアクションを指定することができます。
 

 
 

AppController.phpに $this->Auth->allow()をまとめて記述

 
先の設定方法では、各コントローラーに「$this->Auth->allow()」を記述していく必要がありますので、大きなシステムになった場合、管理が面倒になります。
開発途中で、ログインなしでもアクセスできるページを確認しようとする場合、各コントローラーのファイルを確認する必要があるためです。
 
これを解消するためには、/src/Controller/AppController.phpに下記の様に設定を行う方法があります。
 

 
$this->Auth->allow(["home","index"]);」の部分は、先に紹介した各コントローラーに記述方法と同じで、パラメーターに設定する内容も、アクションの指定をしない設定方法も同じです。
 
また、コントローラーの指定を下記の様に「in_array()」関数を使えば、複数のコントローラーをまとめて設定することも可能になります。
 

 
$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

 - CakePHP 3.x 4.x

GoogleAdwords

GoogleAdwords

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

Message

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

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

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

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

  関連記事

CakePHP 2.3 主キー(ID)以外のキーで更新方法 updateAll

主キー(ID)以外のカラムをキーとして更新する方法、updateAllの使い方をサンプルを用いて解説します。

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

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

CakePHP 2.3 Search Pluginで検索処理 その5入力項目に複数項目入力した場合の AND検索、OR検索

CakePHPの検索プラグイン Search Pluginの検索処理の中で複数項目を入力した場合の AND検索、OR検索についての解説です。

CakePHP3のdatetime型カラムの日時の扱い。秒まで正しく表示する方法
CakePHP3、CakePHP4のdatetime型カラムの日時の扱い。秒まで表示する方法

CakePHP3の日時カラムで秒まで扱う場合はdate()、strtotime()関数ではうまくいかない。CakePHP3であらかじめ用意された「i18nFormat()」を使用する。

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

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

CakePHP3のCakeDC/Usersでログインユーザの所有レコードのみ更新、削除する権限管理の設定方法
CakePHP3のCakeDC/Usersでログインユーザの所有レコードのみ更新、削除する権限管理の設定方法

CakePHP3のユーザ管理、ログイン認証プラグイン「CakeDC/Users」の権限管理を行う方法やアクセスできるコントローラー、アクションを設定、所有権を持つレコードのみ更新できる設定方法を解説。

CakePHP3のアソシエーション機能を使い関連レコードをまとめて削除

CakePHP3でレコードを削除する際に関連するレコードをまとめて削除する機能の解説。フレームワークのメリットを存分に発揮し、コマンドを1行追加するだけで実装可能。

CakePHP3でシェルを作成しコマンドラインから実行・CakePHP2との違い
CakePHP3でシェルを作成しコマンドラインから実行・CakePHP2との違い

CakePHP3のシェルスクリプトを作成し、コマンドラインから実行する方法を解説。複数単語をつなげる場合の対応方法がCakePHP2より制限が厳しくなったのでCakePHP3の命名規則の確認が必要だ。

CakePHP4のCakeDC/Usersのログイン時のリダイレクトとユーザ権限管理の設定解説
CakePHP4のCakeDC/Usersのログイン時のリダイレクトとユーザ権限管理の設定解説

CakeDC謹製UsersプラグインのCakePHP4版の紹介。ログイン認証後にリダイレクトする先の設定方法についての解説と実運用するために必要なコツを解説。便利な仕組みも仕様の理解があって初めてうまく使いこなせる。

CakePHP3のタイムゾーンを協定世界時UTCから日本標準時間JSTにずれを変更する方法
CakePHP3のタイムゾーンを協定世界時UTCから日本標準時間JSTにずれを変更する方法

CakePHP3の標準設定のタイムゾーンは「UTC(協定世界時)」に設定されている。これを日本標準時に変更する方法(app.php、bootstrap.phpの変更方法)の解説。