環境
- php 7.2
- cakephp3.6
- nginx
困っていること
Laravelのように、ルータでAuth認証を行いログインしているかしていないかの振り分けを行いたい。
→要は、各コントローラ毎に「'$this->Auth->allow()'」を書くのではなく、許可リストまたは拒否リストをどこかにまとめたい
やったこと
まず、CakePHP3.6を利用しているので、以下のプラグインが使えそうだと思い、
composer installしました。
https://github.com/cakephp/authentication/
※特にこのプラグインにこだわっているわけではなく、他の機能でできるのであればこだわりません。
※あくまで自分の検索で出てきたものです
bash
1composer require cakephp/authentication: "dev-master"
次に、config/bootstrap.php
にヘルプどおり以下のコードを追記しました。
php
1Plugin::load('Authentication');
この時点で、$this->Auth->allow();
としているコントローラ全てにアクセスできなくなってしましました。
以下のCakePHP3.6の公式ヘルプを見てみると、routes.phpと思われる場所に、
$routes->registerMiddleware('auth', new AuthenticationMiddleware());
という表記があります。
https://book.cakephp.org/3.0/ja/development/routing.html#id15
なのでここで、routes.php
に
use Authentication\Middleware\AuthenticationMiddleware;
を追記し、
php
1/** 2 * ミドルウェアを登録するためのスコープ 3 */ 4Router::scope('/', function($routes) { 5 $routes->registerMiddleware('auth', new AuthenticationMiddleware()); 6});
としました。
次に、以下のように上で用意したミドルウェアを読み込みました。
php
1/** 2 * 一般公開用のルータースコープ 3 */ 4Router::scope('/', function (RouteBuilder $routes) { 5 // このスコープで適応するミドルウェアを読み込み 6 $routes->applyMiddleware('auth'); 7 8 // LP 9 $routes->connect('/', ['controller' => 'Index', 'action' => 'index', 'prefix' => 'Index']); 10 11 // ...略... 12});
そして再度URLでアクセスしても、やはりエラーページが表示されます。
(Cake側のエラーは特に表示されておりません。)
疑問点として、
- そもそも
Plugin::load('Authentication');
を書いただけでエラーページが表示されるのはなぜか… - その挙動があっているとして、どのようにしてroutes.phpでallowを設定すればいいのか
- Cake側の公式では
AuthenticationMiddleware
は引数に何も入れてないのに、gitの方では引数があるように見えます。これは何を指定すればいいのか
があります。
ご存知の方がいらっしゃいましたらご教示いただけますと幸いです。
よろしくお願いいたします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。