質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
CakePHP

CakePHPは、PHPで書かれたWebアプリケーション開発用のフレームワークです。 Ruby on Railsの考え方を多く取り入れており、Railsの高速性とPHPの機動性を兼ね備えています。 MVCやORMなどを「規約優先の考え方」で利用するため、コードを書く手間を省くことができます。 外部のライブラリに依存しないので、単体での利用が可能です。

Twig

Twig は、簡潔で可読性の高いテンプレートを記述することができ、 シンプルに記述することを目的として作られた PHPテンプレートエンジンです。

Q&A

解決済

1回答

368閲覧

CakePHP3.6 Laravelのようにルータで認証情報があるかどうかを取得したい

nnahito

総合スコア2004

CakePHP

CakePHPは、PHPで書かれたWebアプリケーション開発用のフレームワークです。 Ruby on Railsの考え方を多く取り入れており、Railsの高速性とPHPの機動性を兼ね備えています。 MVCやORMなどを「規約優先の考え方」で利用するため、コードを書く手間を省くことができます。 外部のライブラリに依存しないので、単体での利用が可能です。

Twig

Twig は、簡潔で可読性の高いテンプレートを記述することができ、 シンプルに記述することを目的として作られた PHPテンプレートエンジンです。

0グッド

1クリップ

投稿2018/06/04 08:03

編集2018/06/04 08:50

環境

  • 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側のエラーは特に表示されておりません。)


疑問点として、

  1. そもそもPlugin::load('Authentication');を書いただけでエラーページが表示されるのはなぜか…
  2. その挙動があっているとして、どのようにしてroutes.phpでallowを設定すればいいのか
  3. Cake側の公式ではAuthenticationMiddlewareは引数に何も入れてないのに、gitの方では引数があるように見えます。これは何を指定すればいいのか

があります。
ご存知の方がいらっしゃいましたらご教示いただけますと幸いです。
よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

慣れないフレームワークで、いきなり応用編はハードルが高いと思います。
まずは基本通りに組むことをとオススメします。自分の慣れたやり方をやろうとしても、
フレームワークの流儀にあわなければな思う様にはいかないと思いますので。

残念ながら Authentication プラグインは私も試したことはありませんが、

https://github.com/cakephp/authentication#documentation

こちらのリンクに使い方が説明されていますので、ご覧になってください。
Quick Start によると Application クラスに認証ロジックを組み込む感じですかね。

ルーティングに組み込む例はないので、自分で工夫する必要がありそうです。
試していませんが、 AuthenticationMiddleware() の第1引数は Application でなくても
AuthenticationServiceProviderInterface インターフェースを実装していれば良さそうに見えます。

投稿2018/06/05 15:33

okinaka3

総合スコア304

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問