ドキュメントに記載があります。
Configuring Multiple Authentication Setups - CakePHP Authentication 2.x
Application.php に、getAuthenticationService
を追加してドキュメントに記載のように、パスまたはプレフィックスパラメーターを見て、設定を書き換えればよいでしょう。
書き換える設定は、 Authenticatorの Session.sessionKey
、Identifierの Password.resolver.userModel
、それにURL周りの変更で、 Form.loginUrl
と unauthenticatedRedirect
でよいはずです。
未検証ですが、コード例を提示しておきます。
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/08 06:42