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を用意しているのが見えるが、これについてまた次回の記事で取り上げたい。