CakePHP4で、管理者向けの認証と一般ユーザー向けの認証を設置したい場合について・・・
管理画面は /admin 以下にあるとします(route.phpでprefixを設定しているとして)。
Application.php の getAuthenticationService で、urlが/adminで始まっているかどうかで処理を切り分けます。
if ( preg_match( '/^\/admin\/?/', $path ) ) {
〜〜〜
$service->loadAuthenticator('Authentication.Session', [
'sessionKey' => 'ManagementAuth', // 管理者認証に使用するセッションキー
] );
$service->loadIdentifier('Authentication.Password',
[
'fields' => $fields,
'resolver' => [
'className' => 'Authentication.Orm',
'userModel' => 'Adminusers',
],
]
);
〜〜〜
} else {
〜〜〜
$service->loadAuthenticator('Authentication.Session', [
'sessionKey' => 'MemberAuth', // 管理者認証とは別のセッションキーを設定
] );
$service->loadIdentifier('Authentication.Password',
[
'fields' => $fields,
'resolver' => [
'className' => 'Authentication.Orm',
'userModel' => 'Users',
],
]
);
〜〜〜
}
のようにすると、/admin 以下で動くコントローラーでは、Adminusers モデルを使用します。
それ以外のコントローラーでは、Users モデルを使って認証します。
もっとスマートな方法があるんだろうと思いますが、とりあえず、これでうまくいっています。