Authentication Component 2.x でのログイン実装

CakePHP

CakePHPでは、デフォルトでログイン用の認証システムが組み込まれていました。これまではcomponentでの実装がされていまいたが、今までのものはCakePHP4では非推奨になり新たな方法が実装されました。

以前は、CakePHPの独自の実装方法であるcomponentが利用されていましたが、新方式ではPHPの機能であるトレイトを使って組み込まれます。

実装方法について検索すると、いつものチュートリアルのほうがヒットすると思いますが、チュートリアルの説明はかなり雑なので実際に実装しようとするといろいろなところで引っかかると思います。
別に詳しいリファレンスがあるので、こちらを見たほうが良いでしょう。

デフォルトのまま使うのであれば、このまま設定すれば大丈夫ですが、ちょっと変更したいというような場合は注意が必要です。

以下で、引っ掛かった点をまとめておきます。

PHPエンジニアにおくるCakePHP3予習入門: バージョン 3.8 対応 | 辛島信芳 | 一般・入門書 | Kindleストア | Amazon
Amazonで辛島信芳のPHPエンジニアにおくるCakePHP3予習入門: バージョン 3.8 対応。アマゾンならポイント還元本が多数。一度購入いただいた電子書籍は、KindleおよびFire端末、スマートフォンやタブレットなど、様々な端末でもお楽しみいただけます。

カスタマイズ

認証用テーブルの変更

テーブル名が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()メソッドで有効なアカウントかどうかの判定を追加することで対応しました。

PHPフレームワーク CakePHP 3入門 | 津耶乃, 掌田 |本 | 通販 | Amazon
Amazonで津耶乃, 掌田のPHPフレームワーク CakePHP 3入門。アマゾンならポイント還元本が多数。津耶乃, 掌田作品ほか、お急ぎ便対象商品は当日お届けも可能。またPHPフレームワーク CakePHP 3入門もアマゾン配送商品なら通常配送無料。
タイトルとURLをコピーしました