🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

CakePHP

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

Authentication

Authentication(認証)は正当性を認証する為の工程です。ログイン処理等で使われます。

Q&A

解決済

2回答

3289閲覧

CakePHP4 Authenticationプラグインの承認を複数作りたい

tamura_dev

総合スコア7

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

CakePHP

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

Authentication

Authentication(認証)は正当性を認証する為の工程です。ログイン処理等で使われます。

0グッド

1クリップ

投稿2020/12/04 09:49

編集2020/12/04 10:02

現在CakePHP4で開発をしています。
ログイン機能を実装するためにAuthenticationPluginを使用しています。

実装したい内容としては以下2つの承認機能を実装したいです。
・管理者向けのログイン
テーブル Admin
Prefix Admin
/src/Controller/Admin/**Controller.php

・ユーザー向けのログイン
テーブル User
/src/Controller/User/**Controller.php

現在Admin向けの承認機能はドキュメントを読んで実装できたのですが、
複数の承認を作る方法が調べても見つからずにつんでいます。。。。

Adminの承認はPrefixのあるAPPControllerが違うだけでドキュメントの参考コードほぼそのままです。

なんとなく調べた限りだと
Authentication.SessionのsessionKeyで承認の種類を管理している感じなのでしょうか?

ご教授お願いしたいです。

参考資料
https://book.cakephp.org/4/ja/tutorials-and-examples/blog-auth-example/auth.html
https://book.cakephp.org/authentication/2/en/index.html

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

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

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

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

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

guest

回答2

0

ベストアンサー

ドキュメントに記載があります。

Configuring Multiple Authentication Setups - CakePHP Authentication 2.x

Application.php に、getAuthenticationService を追加してドキュメントに記載のように、パスまたはプレフィックスパラメーターを見て、設定を書き換えればよいでしょう。

書き換える設定は、 Authenticatorの Session.sessionKey、Identifierの Password.resolver.userModel、それにURL周りの変更で、 Form.loginUrlunauthenticatedRedirect でよいはずです。

未検証ですが、コード例を提示しておきます。

php

1public function getAuthenticationService(ServerRequestInterface $request): AuthenticationServiceInterface 2{ 3 $prefix = $request->getParam('prefix'); 4 5 $sessionKey = 'Auth.User'; 6 $userModel = 'Users'; 7 $loginUrl = Router::url([ 8 'prefix' => 'user', 9 'plugin' => null, 10 'controller' => 'Users', 11 'action' => 'login', 12 ]); 13 14 if ($prefix === 'admin') { 15 $sessionKey = 'Auth.Admin'; 16 $userModel = 'Administrators'; 17 $loginUrl = Router::url([ 18 'prefix' => 'admin', 19 'plugin' => null, 20 'controller' => 'Administrators', 21 'action' => 'login', 22 ]); 23 } 24 25 $service = new AuthenticationService(); 26 27 $service->setConfig([ 28 'unauthenticatedRedirect' => $loginUrl, 29 // ... 他の設定 30 ]); 31 32 $service->loadAuthenticator('Authentication.Session', [ 33 'sessionKey' => $sessionKey, 34 ]); 35 $service->loadAuthenticator('Authentication.Form', [ 36 'loginUrl' => $loginUrl, 37 // ... 他の設定 38 ]); 39 40 $service->loadIdentifier('Authentication.Password', { 41 'resoler' => [ 42 'userModel' => $userModel, 43 ], 44 // ... 他の設定 45 }); 46 47 return $service; 48}

もう一つの方法として、ルーティング(routes.php)の方で各プレフィックス内で、それぞれAuthenticationMiddlewareと、それぞれに設定したAuthenticationServiceを登録する方法があります。

php

1$routes->prefix('Admin', function (RouteBuilder $routes) { 2 $service = new AuthenticationService(); 3 // ... Admin用 AuthenticationService の設定を行う 4 5 $routes->registerMiddleware('auth_admin', new AuthenticationMiddleware($service)); 6 $routes->applyMiddleware('auth_admin'); 7 // ... その他のルーティング設定 8}); 9 10$routes->prefix('User', function (RouteBuilder $routes) { 11 $service = new AuthenticationService(); 12 // ... User用 AuthenticationService の設定を行う 13 14 $routes->registerMiddleware('auth_user', new AuthenticationMiddleware($service)); 15 $routes->applyMiddleware('auth_user'); 16 // ... その他のルーティング設定 17});

投稿2020/12/04 11:49

nojimage

総合スコア959

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

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

tamura_dev

2020/12/08 06:42

ありがとうございました! 1の方でやらせていただきました。 無事解決しました。 なるほど、$requestの情報を元に切り分けるのですね、、 別例まで出していただきありがとうございます! こちらも触ったことのない機能だったので勉強になりました。
guest

0

タイポミスを1つ
コード例の、resolver の v が抜けてます。

投稿2021/12/01 03:47

binbin4649

総合スコア3

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問