CakePHPでは、デフォルトでログイン用の認証システムが組み込まれていました。これまではcomponentでの実装がされていまいたが、今までのものはCakePHP4では非推奨になり新たな方法が実装されました。
以前は、CakePHPの独自の実装方法であるcomponentが利用されていましたが、新方式ではPHPの機能であるトレイトを使って組み込まれます。
実装方法について検索すると、いつものチュートリアルのほうがヒットすると思いますが、チュートリアルの説明はかなり雑なので実際に実装しようとするといろいろなところで引っかかると思います。
別に詳しいリファレンスがあるので、こちらを見たほうが良いでしょう。
デフォルトのまま使うのであれば、このまま設定すれば大丈夫ですが、ちょっと変更したいというような場合は注意が必要です。
以下で、引っ掛かった点をまとめておきます。
カスタマイズ
認証用テーブルの変更
テーブル名がUsersでない場合以下のように出ます。
Table class for alias Users could not be found.
これは、認証に使うテーブルがデフォルトと違う場合に発生します。
getAuthenticationServiceメソッドのAuthentication.Passwordをセットしている関数に
resolverのオプションを追加します。
以下はモデル名がMembersだった場合の処理です。
また、ログインに使うカラムについてもfieldsで指定することが可能です。
$authenticationService->loadIdentifier('Authentication.Password', [ 'resolver'=>[ 'className' => 'Authentication.Orm', 'userModel' => 'Members' ], 'fields' => [ 'username' => 'email', 'password' => 'password', ] ]);
ログイン条件の追加
ログインできるユーザーかどうかの条件を追加する方法です。
例えば、deleteカラムを用意して削除したユーザーに設定して置き、ログイン時にdeleteフラグが立っていたらログインさせないというような実装の時に使います。
昔のバージョンではuserScoprとかscopeとかで条件を設定していたのですが、リファレンスには記載がありません。ソースを見てみたのですが、それらしい機能はありませんでした。
将来的に何か方法が追加(もしくは見落としている?)されるかもしれませんが、とりあえず、login()メソッドで有効なアカウントかどうかの判定を追加することで対応しました。