CakePHP4 でプラグインとして提供されている cakephp/authentication のメモです。
認証したいだけなんですが、 cakephp/authentication は登場するクラスが多いです。
すべて以下の Cookbook に記載されている内容です。
- CMS Tutorial - Authentication
- CakePHP Authentication - Quick Start
登場クラス
主要な登場クラスとその概要です。
クラス | 概要 |
---|---|
AuthenticationMiddleware | リクエストごとに認証処理を行う PSR の Middleware |
AuthenticationService | 認証処理の 一般的な Facade |
AuthenticationComponent | 認証処理の CakePHP の Component |
Identity | ログインユーザー情報 (AuthenticationService->getIdentiy(), AuthenticationService->buildIdentiy() で生成される) |
Authenticator | 認証処理 |
Identifier | ログインユーザー情報の取得処理 |
Identifier\Resolver | ユーザー情報取得処理 |
こちらはサブ的な登場クラスとその概要です。
クラス | 概要 |
---|---|
PasswordHasher | パスワードハッシュ処理 |
UrlChecker | URLチェック処理 |
カスタマイズするとき
Auth0やSAML2.0等の独自の認証処理を追加する場合は、独自の Authenticator
を作れば良いです。
ログインユーザー情報を DB 以外から取得する場合(例えば、DynamoDB から取得する等)は、 Identifier
もしくは Identifier\Resolver
を作れば良いです。
Authenticator
Identifier
の補足
Authenticator
Identifier
は複数指定することができます。
複数指定した場合、設定した順番に処理がされ、成功すると、後続で指定された Authenticator
Identifier
は呼び出されません。
通常の認証の場合、Session情報にログインユーザー情報があるか確認し、ない場合は Form情報としてログインユーザー情報が渡っているかを確認します。
そのときは Authenticator
を以下のような感じで、2つ設定します。
// Load the authenticators, you want session first
$authenticationService->loadAuthenticator('Authentication.Session');
// Configure form data check to pick email and password
$authenticationService->loadAuthenticator('Authentication.Form', [
'fields' => [
'username' => 'email',
'password' => 'password',
],
'loginUrl' => '/users/login',
]);