CakePHP4.xでログイン機能を実装することになり、Cookbookに従って”Authenticationプラグイン”を導入することにした。
なお、3.xで使用していた”AuthComponent”はすでに非推奨となっていた。
◼️CakePHP3.10 Cookbook_AuthComponent
https://book.cakephp.org/3/ja/controllers/components/authentication.html
手順は、「シンプルな認証と認可のアプリケーション」ページを参考にした。
◼️CakePHP4.x Cookbook_シンプルな認証と認可のアプリケーション
https://book.cakephp.org/4/ja/tutorials-and-examples/blog-auth-example/auth.html
ログイン機能の動作確認時、以下のエラーでハマった。
debug: Authentication\Authenticator\Result::__set_state(array( '_status' => 'FAILURE_OTHER', '_data' => NULL, '_errors' => array ( 0 => 'Login URL `/` did not match `/staffs/login`.', ),
“Login URL did not match”で調べていたところ、src/Application.php内の以下の記述がよろしくなかった模様。
// メールとパスワードを選択するためのフォームデータチェックの設定
$authenticationService->loadAuthenticator('Authentication.Form', [
'fields' => [
'username' => 'email',
'password' => 'password',
],
// 'loginUrl' => '/users/login',
'loginUrl' => Router::url('/users/login'),
]);
同様に、”unauthenticatedRedirect”も”Router::url()”で指定するようにする。
$authenticationService = new AuthenticationService([
// 'unauthenticatedRedirect' => '/users/login',
'unauthenticatedRedirect' => Router::url('/users/login'),
'queryParam' => 'redirect',
]);
なお、「CMS チュートリアル – 認証」ページを見てみると、こちらはどちらも”Router::url()”を使用した記述となっていた。
◼️CakePHP4.x Cookbook_CMS チュートリアル – 認証
https://book.cakephp.org/4/ja/tutorials-and-examples/cms/authentication.html
最後に、上記エラーをよく見るとusersとは別にstaffsを用意しているのが見えるが、これについてまた次回の記事で取り上げたい。

