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

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

ただいまの
回答率

90.50%

  • CakePHP

    2351questions

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

  • Twig

    76questions

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

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

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 1
  • VIEW 246

nnahito

score 1726

 環境

  • php 7.2
  • cakephp3.6
  • nginx

 困っていること

Laravelのように、ルータでAuth認証を行いログインしているかしていないかの振り分けを行いたい。
→要は、各コントローラ毎に「'$this->Auth->allow()'」を書くのではなく、許可リストまたは拒否リストをどこかにまとめたい

 やったこと

まず、CakePHP3.6を利用しているので、以下のプラグインが使えそうだと思い、
composer installしました。
https://github.com/cakephp/authentication/
※特にこのプラグインにこだわっているわけではなく、他の機能でできるのであればこだわりません。
※あくまで自分の検索で出てきたものです

composer require cakephp/authentication: "dev-master"

次に、config/bootstrap.phpにヘルプどおり以下のコードを追記しました。

Plugin::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;
を追記し、

/**
 * ミドルウェアを登録するためのスコープ
 */
Router::scope('/', function($routes) {
    $routes->registerMiddleware('auth', new AuthenticationMiddleware());
});

としました。


次に、以下のように上で用意したミドルウェアを読み込みました。

/**
 * 一般公開用のルータースコープ
 */
Router::scope('/', function (RouteBuilder $routes) {
    // このスコープで適応するミドルウェアを読み込み
    $routes->applyMiddleware('auth');

    // LP
    $routes->connect('/', ['controller' => 'Index', 'action' => 'index', 'prefix' => 'Index']);

   // ...略...
});

そして再度URLでアクセスしても、やはりエラーページが表示されます。
(Cake側のエラーは特に表示されておりません。)


疑問点として、

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

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

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

0

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

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

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

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

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

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

  • ただいまの回答率 90.50%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

  • 解決済

    cakephpでshellにgetパラメータを渡す方法

    前提・実現したいこと shellであるデータを作り、そのデータをDBに格納する処理を やっています。 作成したデータをDBに格納する際に、外部からgetでパラメータを 渡し

  • 受付中

    cakephp2のroutes.phpでパラメータを非表示にしたい

    お世話になります、cakephp2のroutes.phpでログインするアカウント毎にURLにそのアカウントのアカウントIDが表示されてしまうのですが、それを非表示にするには、rou

  • 解決済

    CakePHP3系でController以下に複数のディレクトリを配置したい

    プログラミング初心者です。(CakePHP2系のcrudを触った事がある程度です) CakePHP3系で、Controller以下に複数のディレクトリを配置し、それぞれに対応

  • 解決済

    cakephp3でログイン認証

    前提・実現したいこと Cakephp3でログイン画面を作ろうとしています。 AppControllerにAuth認証のコードを書いたのですが、AppControllerを継承し

  • 解決済

    cakephp3でvendorのファイルの読み込み

    前提・実現したいこと vendorにあるPHPExcelのクラスを読み込みたい。 //vendorのところにphpexcelというフォルダを作り、その中にPHPExcel.ph

  • 解決済

    cakephp3のroutes.php設定

    /pages/lpo/ にアクセスがあった場合、 /hoge/ にリダイレクトしたいです。 (/hoge/ の内容を表示ではなく、リダイレクトです。) しかし、/

  • 解決済

    CakePHPのAuth認証の結果取得

    質問内容 CakePHPのAuth認証の結果取得について、登録済みのユーザーネームとパスワードをPOSTしても全てログイン失敗が返ってきます。下記の前提ファイルの誤りをご指摘いた

  • 解決済

    CakePHP3で CakeDC/Usersのカスタマイズ

    CakePHP3で CakeDC/Usersを利用しています。 ユーザ登録を行う際のバリデーションの内容を変更したいのですが、どうすればいいでしょうか? /vendor/c

同じタグがついた質問を見る

  • CakePHP

    2351questions

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

  • Twig

    76questions

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